Skip to content

Everything I learned transitioning out of the Army

License

Notifications You must be signed in to change notification settings

neb-abera/transition

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Everything I learned transitioning from the Army to Software Development

Table of contents

  1. Intro
  2. My recommendation on how to learn to program
    1. Learn the fundamentals of programming
    2. Include dedicated coding and problem-solving training in your schedule (daily repetition is best)
    3. Take a data structures and algorithms (DSA) course
    4. Learn to think like a Software Engineer
    5. Learn how to search for solutions independently
    6. Be a curious and consistent learner
    7. Follow talented content producers
  3. How to stay focused on learning to program
  4. Frequently asked questions
    1. What programming languages should I learn
    2. How do you set your computer up for programming
    3. How can kids learn to program
    4. What field should I go into? (software development, IT, cyber)
    5. What matters most for getting a Software Engineering job?
    6. How do I get a technical job in the tech industry as a veteran or current Service Member
    7. How do I train to pass a technical assessment or interview
  5. Learning resources I have personally used

Intro

The target audience for this are people in the military that are interested in working in tech, but don't know how to program. I made these guides during my transition from the Army to Software Development. The more I learn, the more I'll update. I embedded links, documents, and videos. I encourage you to click on those to ensure that you understand the topic in its breadth and depth. This is a work in progress so feel free to make send me questions, comments, and recommendations.

  1. The timeline on Sutori shows everything I learned during my transition, and has helpful links and documents embedded. It answers questions about

    • the Army transition timeline, things I wish I had known, and recommendations about your transition
    • general career advice like how to adjust to the business world and learn to speak their language
    • resume help
    • networking and interview tips
  2. There are so many incredible resources out there to help transition people into tech. But, the enormity of resources can give people "paralysis by analysis" as they try to decide which option to pick. This document below is meant to answer questions like

    • how do I learn to program?
    • which programming language should I learn?
    • how do I transition to a job in software development, information technology, or cyber?

    Here is a good intro video from Andy Sterkowitz on some of the topics I will cover below.

My recommendation on how to learn to program

1. Learn the fundamentals of programming

There's really no wrong way to learn the fundamentals of programming. Just pick one and stick with it. However, I recommend that you focus on doing and ensure that you don't get stuck in "tutorial hell." Tutorial Hell is what happens when you passively watch tutorials and don't learn much, most likely because you aren't learning by doing, and will iteratively start and stop tutorials in perpetuity.

  • Open Source Society's Intro to Programming and Intro to Computer Science I think those two courses are a good program and what I would recommend to people with no programming experience and who don't want to pay for a course. It is free, has a beginner-friendly structure, is taught in Python, and has a good roadmap for future topics. I disagree with how OSCS requires discrete math BEFORE data structures and algorithms. Math like discrete math and linear algebra are great to study once you're ready to do more than CRUD operations. Make sure you stay actively engaged by doing the exercises, problem sets, etc. It's easy to think you can learn from just watching the videos.. you can't. You learn by doing things repeatedly

  • The prep course from Hack Reactor: This is a good free alternative to the first course if you're okay with learning JavaScript. I like it because it is free, forces repetition, and has one path to completion. I think prep courses from boot camps are valuable because these companies know how to teach beginners to become software developers. They do what they know works. I also believe that the repetition they provide is essential to the learning process. This program forces you to get the repetitions in. There is some instruction, you try stuff on your own, and then there's a video to watch if you get lost and need help. It is taught in JavaScript so it's only useful if you'd like to learn or work in web development.

  • There are many exceptional intro programming courses for sale on Udemy such as Beginning C++ Programming - From Beginner to Beyond or Mastering 4 critical SKILLS using C++ 17 by Dr. Moustafa Saad Ibrahim. The first course focuses on long instruction and limited practice, while the second is short on instruction and focused on practice and problem solving. I like Dr Moustafa's course the most out of all intro courses since it provides the best problem solving foundation. He also provides follow-up courses on data structures, algorithms, coding interviews, and runs competitive programming instruction.

  • Harvard's CS50x: It's an incredible course, but I don't think it's for a beginner with no prior experience. You should pick this if you're ambitious, or have prior experience. I don't get how it's so highly regarded for beginners on Reddit. Most beginners will struggle with week 5 and beyond in this course. The course escalates quickly, includes data structures and algorithms (DSA), and uses a variety of languages. It's like a buffet of topics and I'm not sure if most people will leave the course confident in any of the languages they cover. However, it has the best instruction, resources, and subjects if you are a dedicated student.

2. Include dedicated coding and problem-solving training in your schedule (daily repetition is best)

I recommend Codewars to all beginners for daily practice. HackerRank is a good option if you're style trying to learn the syntax of a language. Codewars is a free website that will give you problems to solve based on your skill level and the language you want to get better at. They also have solutions posted and a forum to discuss stuff. It’s also fun for kids because you get a “rank” and it’s fun to level up.

Practicing a little bit every day is better than practicing a lot not very often.

I recommend setting aside 5x60 minutes sessions a week. This is my methodology for training

  1. set a clock for 20 minutes
  2. try to solve the problem with limited use of documentation
  3. compare my solution to other solutions provided
  4. if there's a significantly better way to solve the problem then I learn that pattern.
  5. Redo the problem until I can do it with no documentation or outside assistance
  6. find a different problem and restart this process until I'm done with the training session

You need to use sites to train your problem-solving and programming language-specific skills.

  • Codewars is great for beginners to rank up and is free
  • Edabit has a lot of good problems to practice, but lacks the structure of Codewars and I used up the free trial in like two days
  • LeetCode but you'll need to finish a DSA course before you'll be able to solve most of the problems. It's free. I only recommend getting a subscription if you're REALLY interested in knowing what companies focus on specific DSA problems.

3. Take a data structures and algorithms (DSA) course

If you can afford it, Abdul Bari's "Mastering Data Structures & Algorithms using C and C++ is an incredible combo with Dr Moustafa Saad Ibrahim's data structures, algorithms part 1 and part 2, and course for technical interview problems. Abdul Bari's course provides in-depth instruction with little problem solving, while Dr Moustafa's has concise instruction and lots of problem solving.

Another options is getting Grokking Algorithms by Aditya Bhargava and pairing that with structy. The book is illustrated, programmed in Python, and intuitive. Structy provides video instruction and an environment to code DSA in Python, JavaScript, and C++. Structy is a paid subscription by my favorite programming instructor. The website has videos, guides, lets you practice DSA problems, and has solutions all in one place. I found it very worth it. However, there is only one problem per topic so it lacks the depth of some of the other options.

There are plenty of free resources online to learn DSA. You can get a free account on structy and then just youtube/google the section title for free resources. I needed the easy access, accountability, and structure of the book and course to learn.

I think DSAs should be taught in a separate course from intro to programming. I think people should be comfortable with the fundamentals of programming in one language before they give bandwidth to DSA.

If you want a follow-up DSA text, or just want a more robust reference, then I recommend the Algorithms textbook

4. Learn to think like a Software Engineer

Thinking like a programmer is the most important part of learning to program. That’s why no matter what route you take in programming, you’ll learn the skills of a programmer. That's because memorizing programming language syntax does not make you a programmer, applying the problem-solving mindset is what makes you a programmer.

I like Hack Reactor's problem solving methodology. I've added my own additions in paranethesis

  1. Interpret the prompt 
  2. IOCE - Inputs, outputs, constraints, edge cases
  3. Write Tests
  4. High Level Strategy(s) (& break the problem down into easier-to-tackle portions)
    * Optional: Make a Diagram (can "white board" the problem. I like to use pen and a notebook)
  6. Pseudocode the Strategy ( comment pseudocode directly into the program)
  7. Implement the Solution

I also add the following portions when I'm studying

  8. Try your plan. 
    * Try not to use any outside resources
    * If you get stuck, for a reasonable amount of time, then allow yourself to use documentation
    * If documentation doesn't help then as a last resort research what the best way to do each technique is
     
  9. If your solution worked 
    a. Look up to see if there were better ways to do it and re-try the problem using the optimal techniques

    b. See what the best people in the field are doing

    * If your solution didn't work then go back to step 1

Andy Harris has a long, but thorough, video on this topic. You can also search for other videos on the topic. Don't feel compelled to watch the video, you can always come back to it.

I had never read this website, until I made this document, but they say the same thing I just did

5. Learn how to search for solutions

You need to learn how to effectively search for the answer to your questions. The sum of human knowledge is at your fingerprints, via a phone or computer, you just need to know how to sort and analyze relevant information. Being good at googling is a skill you should develop. You should always see what the best or most recommended way to do something is. Whether you’re buying a car, looking at how to learn a programming language, or solving a coding problem at an interview.. it’s all the same problem-solving skill.

There are different ways of using google search to its full potential. I like to use google to search Reddit and quora for the answers I'm looking for. Adding "Reddit" or "quora" to your search terms, looking for the most recent posts with the most discussion, will usually filter out the spam. The most upvoted answers are usually the best. The dissenting opinions are also important to understand.

Most of my search results on any given day are probably "best ______ Reddit" "best ______ quora"

6. Be a curious and consistent learner

Continue to develop your problem-solving skills, and study follow on topics that interest you or that you want to work in.

I recommend using Teach Yourself CS if you are a self-taught programmer.

Programming is just like any other skill. You're only good at what you repeatedly do. Find what works best for you to understand a topic. You should use as many resources as it takes to find the best way to make a topic click for you. You can register for online courses, watch youtube videos, get textbooks, read forums, etc.

You can get ideas on what to study from roadmaps like roadmap.sh until you know what you're doing. I also like the Open Source Computer Science Bacehlors for ideas on what I should study. I disagree with how OSCS requires discrete math BEFORE data structures and algorithms. Math like discrete math and linear algebra are great to study once you're ready to do more than CRUD operations

AVOID PASSIVE "LEARNING" - This is one of the most common mistakes people make when they try to learn to program. You should spend more time "doing" than passively learning how to do something. Usually spending <=30% of your time reading/watching and >=70% coding

Here are two videos on mistakes beginners make. The first is from Aaron Jack and the second is a video from William Lin on competitive programming but the principles still apply.

7. Follow talented content producers

Here are some of my favorite content producers

Frequently asked questions

What programming languages should you learn

Once you learn your first programming language, you’ll find that you need to learn more programming languages because you need better suited tools for what task you're trying to accomplish. Just remember that specialization is more important, will get you better paid, and will make you a better program. You should have one or two languages you are an expert at, and then one or two that you are familiar with. I recommend learning the following languages so that you’re well-rounded.

  1. Python: a high-level general-purpose language.

Pros: Its syntax is similar to English so it’s very natural to read and write in. It is very easy to create programs quickly in Python. There are a lot of job opportunities. It is very well supported. It is a growing language. It’s used in software development, data science, artificial intelligence, cyber security

Cons: it is a high-level, interpreted, dynamically typed language so you’ll need another language if you want to work in high-performance, embedded, systems programming, etc. It is a “slow” language when compared to languages like C++

  1. JavaScript: the dominant language of web development (only if you're interested in web development or a coding boot camp)

Web development is the easiest way to get into high-paying software engineer jobs. Cons: it isn’t really useful for anything else. You can use frameworks to create applications using Javascript but they will be slower/worse than their native counterparts

  1. Other languages

You'll need a more performant programming language if you need to do work that requires serious performance or memory management. If you don't know what you should learn, I recommend that you learn C++. It is widely applicable, widely supported, and has a vast ecosystem of resources for learning it. If you're interested in competitive programming then I especially recommend C++. I like C++ but there’s such a wide list of languages that I’ll let you figure out what you want to pursue. At this point, you’ll have already learned one or two programming languages so picking up additional ones will be much easier for you.

I prefer statically typed and compiled languages that offer access to low-level operations and resource management. I think the greatest combination of languages to get the ability to do the most while knowing the least amount of languages is C++, C# through .Net, TypeScript rather than JavaScript, and Python.

How to stay focused on learning to program

There's really no best way to learn software development. It’s a wide field, with tons of sub-fields, and a lot of information. Here are some important tips I’ve found

  1. Staying organized: I had to start journaling key takeaways so that I don’t get lost, storing stuff in bookmarks, using Outlook calendar etc. I recommend that you download a joint email/calendar manager like Microsoft Outlook, get a meeting manager like Calendly to synch to your calendar, and then synch both of those to a video conferencing site like Zoom. That way you can automatically update your calendar with important meetings/reminders and seamlessly send/receive video conferencing requests.
  2. Making and sticking to a plan: it’s easy to get distracted so I found that I need accountability to stay on track. I got an agenda and forced myself to follow a daily routine, turned on “screen time” and notification limits on my phone and computer, signed up for classes that have structure, found friends online, and set appointments so I had a deadline to force myself to get better by. You have your kid so that’s a good accountability buddy.
  3. Learning the best way you learn: I’ve found that I learn best from textbooks and using code-grind websites to solve problems (like CodeWars or LeetCode). If you’re going to use code grind websites set a 20minute timer and try to solve the problem with no help besides looking at the documentation. Then look at the solution afterward and look up anything I didn’t know. I’ve found that I learn best by working through a textbook and then YouTubing anything I don’t understand right away. I buy textbooks because I like knowing the “why” behind stuff and I can bookmark it and reference it later. The danger with videos/books is that you can think you “know” how to do something by watching them. Don’t fall into that trap

How do you set your computer up for programming

I recommend just using a free flagship IDE like Visual Studio Community, XCode for Apple, until you know enough to move on. If I'm not using Visual Studio Community I like to use Visual Studio Code with a whole host of extensions such as these

Use repl.it to practice programming if you're intimidated by setting up a text editor or integrated development environment

The intro material you choose will give you instructions on what they recommend to do for set-up. Here is a list of common text editors and integrated development environments (IDEs)

How can kids learn to program

If you have smaller kids then I recommend getting them to try the recommendations below. You can graduate them to the recommendations above when they've shown interest and seem ready. The tough part of teaching kids is keeping them engaged and focused on one task for a set period of time. These websites try to make the learning process fun for kids. So, I think they are worth a shot. But, they don't teach actual coding so they will eventually have to switch to something like the above recommendations. Programming involves sitting at a computer and problem-solving for extended periods of time. There's really no way around that and some kids may not be into that. Teenagers may be ready to just jump into the recommendations above, but you can have them try the suggestions below to gauge their interest.

  • CodeCombat a game that includes coding. It seems like a fun way to get kids interested in programming. It's free but it may bug you to upgrade periodically
  • scratch this is MIT's attempt to appeal to kids. Kids can learn to program by dragging and dropping stuff to make stories and programs. It isn't as gamified as CodeCombat but still seems like it would be fun for kids
  • PyGame kids, teens, or even adults, that are interested in making simpler video games would have fun with this. This one requires more setup though so you'll probably have to help them out in the early stages with this

My subjective opinion on working in three popular areas in tech (software development, IT, cyber)

  1. Software development: develop/maintain software products. Usually, a money maker for companies so is treated well by corporate leadership. Usually highly paid. Usually resistant to employment downturns. Requires constant study and improvement to stay on top of trends. Not every company has software engineers. The field is getting exponentially bigger and there’s a war for talent

  2. Information technology: a support role. keeps the electronic “plumbing” going (keep the network alive). Usually seen as a “cost” depending on the company culture. If you work in a company culture that doesn’t appreciate it they might pay IT less. Every company has IT. The field has kind of stagnated

  3. Cyber: your job is to protect the company's network from infiltration, or to break into the company to test their defense (blue team vs red team). Usually higher paying than IT, since it’s kind of a subspecialty that requires extra knowledge. Not every company has cyber teams. Some companies don’t value cyber until they are attacked. A growing field that is getting humongous and there’s a war for talent

    Here is a general career roadmap in the industry

    You'll eventually need to figure out what field of computer science you want to work in. This is important because specialization is what gets you paid but there are countless sub-fields, programming tools/languages, companies, etc. I recommend looking up the various fields and finding out what interests you. In the picture below there are countless areas of specialization in each job title.

    If you don't know what to pick, you can just apply to a wide breadth of jobs and take whatever you get. You can worry about specialization after you figure out what you do and don't like at your first job.

What matters most for getting a Software Engineering job? Do certifications, degrees, or skills matter for getting a job in the industry

For jobs in computer science fields, the most important things are

  • relevant job experience using the software stack and skills they are hiring for

  • years of experience in that specific field using adjacent stacks and skills

  • years of experience in a general computer science field

  • passing the hiring assessments (usually they use sites like “leetcode” or their own assessment)

  • government organizations, contractors, and some companies also give veteran's preference.. especially if they have security clearances (since it saves them time and tens of thousands of dollars)

  • networking and personability. Join professional organizations, attend conferences, attend local meetups etc. This will help build your network

You don't need a degree in computer science, IT, or cyber to get into those fields. The degree, and some certs, will matter most only when you're looking for your first role in the industry. The degree will help you get your foot in the door, make you more competitive than your peers, will probably give you relevant skills, and has taught you “how to learn” and how you learn best. Getting a degree is great and makes you more competitive, but isn’t a requirement. Once you learn how to program it’ll take you about 3-6 or so months, if you're dedicated, to learn data structures and algorithms well enough to pass “hard” level problems on leetcode which is what the MAANG companies require. If you want a regular web development job you won’t even need to master data structure and algorithms. You could be employable after learning how to program with 6-12 months worth of practice. Some companies are willing to hire beginners and train them as junior developers, so you might get a job quickly after learning how to program.

The key thing to know is that in these fields what pays is experience. The better you are at your job, no matter what field, the more you’ll make. The top-level IT guys make just as much if not more than software engineers. The important thing is to pick something that interests you, or that you could stand doing, and the money will come.

There aren’t really any certs worth their weight in software engineering. In IT and cyber, there are certs that will help since they certify the knowledge you have, but they are not a replacement for it. However, certs are good for use as a study guide for what skills you need to learn. I use to use the site below, but it looks like their link broke I sent them a message). But to answer your question, it depends on what part of software development you’re interested in. But generally, no one cares about certs past the first software development job. Certs and degrees will help candidates get their first entry-level job. After that companies just look for years of experience and what you can build for them to make them money

https://www.itresourcescorp.com/top-it-certifications-roadmap/

How do you get a technical job in the tech industry as a veteran or service member

The only real difference for veterans is that there are some dedicated/funded job readiness programs, plus a network to market yourself through. If you're interested in Software Engineering the best thing you can do is to "grind leetcode," publish software, and expand and utilize your network. You can do the majority of your networking via LinkedIn by finding veterans that are working in areas you're interested in. This is a good example of a resource I used early on from Kalan Snyder.

By "grind leetcode" I mean to master data structures and algorithms in a programming language and grind coding challenges on popular sites like leetcode. I have my recommendations on free and paid products below. You can also consider using VET TEC to attend coding boot camps. They will upskill you and have connections in technical job placement.

Service members and veterans should also apply for BreakLine and take their free online classes. BreakLine's purpose is to help veterans, minorities, and women get into high-paying tech roles. This is the best way to get a tech job.

Remember that depending on the company, you will likely have to pass technical assessments to get a job offer.

If you have a security clearance then it may make you seem like a more attractive applicant to government contractors since clearances can cost them time and tens of thousands of dollars to get for uncleared workers.

However, these companies often do capital E Engineering, not the typical web development which has a lower bar to entry, which involves using STEM skills to fight against limitations like physics to optimize the performance of a manufactured product, enterprise scale teams tackling enterprise scale problems, legal and moral liability etc. They absolutely prefer STEM graduates. You should do everything you can to make yourself the most appealing applicant possible. It's a myth to think that you are guaranteed a job just because you have a clearance. If you don't have a STEM degree, preferably in Computer Science or Electrical Engineering, then I recommend that you pursue graduate studies.

Understanding capitalism will help you focus your job search

  • Corporations are capitalist. They are always optimizing. They provide goods and services to make money, they must comply with regulators. Their goals are to make money, stay out of trouble, have a good reputation. Hirers are interested in exceptional demonstrated performance and potential. They want someone that consistently achieves results. They're always on the lookout for 10xers or unicorns. They want to go with safe bets and proven people

  • NGC in the business of engineering. Massive aerospace and defense projects. Incredible amount of legal and ethical requirements. Billions on the line. Lives of people on the line. Have lots of competition. They do capital E professional Engineering (fighting the limits of math/physics/science, legal requirements, ethical requirements, systems engineering).

  • Tech companies rely a lot on investment. timing can play a part in getting hired. When the fed sets interest rates low, money is coming in then they can afford to take more risks (hiring traditionally un-qualified people since they need bodies, startups that get investments for dumb ideas or that don't turn a profit)

  • Corporations have enterprise scale problems. Knowing how to code doesn't make you stand out. Knowing how to solve enterprise level or scaling problems do. Focusing on unsexy enterprise tech or skills can be useful (design patterns, making ugprades in large code bases without breaking integration, unit/integration testing, authentication/authorization, CI/CD, dependency management etc)

  • You are competing against a horde of peers, so why would shortcuts work? (especially in a market that's saturated like junior SWE). So do everything you can to make yourself marketable (masters degree, networking at conferences/meetups, publishing novel work with peers etc). Hiring a junior Software Engineer is a >$100k gamble. How are you going to make yourself appealing to the corporation when compared to your peers. Tens of thousands of Computer Science, Computer Engineers, Electrical Engineers, Mathematicians graduate every year. Not to mention tens of thousands of more Mechanical, Systems, Bio engineers etc. Then you have the Tech anscillary fields like IT UX. Then everyone else.

Fundamentals of hirability at NGC (really anywhere)

  • Relevant professional experience
  • Exceptional performance on indicators of success (competitions, certifications, professional exams, leetcode etc)
  • Security clearance - costs companies tens of thousands of dollars. It's an advantage if you already have one
  • Military service - can use this to gain relevant professional experience, security clearance, money for education, easier acceptance criterias, networking etc
  • Education
  • relevant course of study
  • performance
  • reputation of institution. Membership in exceptional organizations reflects well on yourself. You represent your organizations, and they represent you
  • Performance / accolades. Looking for demonstrated high performance across years, an ability to adapt and maintain high performance. Competitive programming, math competitions are great. How have you performed in comparison to your peers at the highest level?
  • Network: knowing people that can vouch for you and expend their political capital on you. Your network should have breadth and depth. Membership in professional organizations. Go to conferences. It's easier to have execs get you a job since they have more influence
  • Market economics: Is the field saturated for juiniors? Is there heavy investment/growth currently? I've given four referalls to people with Math/CS degree, some masters degrees, in the past few months and none of them passed. Target less competitive jobs (maybe transfer later): IT, software quality. Or target less competitive/desirable/harder fields in SWE (embedded, enterprise scale problems)
  • Likeability

How do you train to pass a technical assessment or interview

This level of preparation is probably overkill for most roles at most companies. However, it's good to expose yourself to what top-level companies expect from technical interviews

  • An article from Alex Nguyen on the resources he uses to prepare for technical interviews here
  • An article from Alex Nguyen on his system for solving problems in technical interviews here
  • A video from Clement Mihailescu on technical interviews here
  • A video from Clement Mihailescu on the most important concepts for technical interviews here
  • AlgoExpert may help with DSA problems prep for technical interviews. I haven't tried it yet so I can't give my personal recommendation for it. I've heard it is a great product but lacks systems design and should be used in tandem with products like Cracking the Coding Interview and Elements of Programming Interviews. I'll give it a try when I get ready for technical interviews in about 6 months.

What learning resources have I personally purchased or used

What C++ resources have I personally purchased or used

  • Mastering 4 critical SKILLS using C++ 17 by Dr. Moustafa Saad Ibrahim is the most concise way to learn C++ and develop problem solving skills at the same time. The emphasis is on short lectures and lots of problem solving
  • Beginning C++ Programming - From Beginner to Beyond This is the most updated, best organized, and most intuitive way I've found to learn C++. There's also lots of hours of material. However, it lacks a problem solving solving focus to force you into writing lots of C++
  • Programming: Principles and Practice using C++ (2nd Edition) This is how I was introduced to C++. It's a great resource but there are quicker, and more intuitive, ways to learn C++ for self-taught folks. I think my largest critiques are that it sometimes uses concepts before they're introduced, seems to pontificate on some subjects uneccesarily or too early, and isn't designed to get folks quickly trained by focusing on what I think are "fundamental."
  • LearnCPP.com is a free resource that is very well structured and easy to use as a quick way to practice
  • cppreference.com is a free reference resource that is very well structured and easy to use as a quick reference
  • The C++ Programming Language (4th Edition) This is a valuable reference (covers C++ 11 and 14)
  • Effective C++
  • Effective Modern C++

What data structures and algorithms resources have I personally purchased or used

  • Dr Moustafa Saad Ibrahim has an excellent series on data structures, algorithms part 1 and part 2, and a course for technical interview problems. He is a competitive programming coach and knows what it takes to excel at problem solving and DSA. He has a higher bar of entry for expected level of programming familiarity. Most of his courses are also in C++. His course also seems to be more focused on teaching how to use data structures and algorithms to solve problems. That is in contrast to some of the resources below. I'd say that the resources below are more focused on teaching how to build data structures and understand how they work.
  • Abdul Bari's "Mastering Data Structures & Algorithms using C and C++ is the best instructor I have found for understanding data structures and algorithms if you're into a lecture format. The course is obviously in C/C++. He is a great teacher and demonstrates everything on a whiteboard and in his course he demos on a computer too. However, his course is more about building data structures then it is on using them. It is also very light on algorithms or ways to try out the topics you've learned. I found that I liked working through structy and then supplementing anything I needed more detail on with Bari's course. He is a phenomenal instructor and also runs a popular YouTube channel that has even more DSA videos.
  • Grokking Algorithms My first introduction to DSA. It's written for Python. It's kind of written like a children's book. It's a nice and comfortable introduction but isn't very good as a reference or to understand topics in depth.
  • structy An excellent one stop shop for DSA and common operations you'll be asked to do in an interview format. The course has JavaScript, C++, and Python. It only has one practice problem per topic covered though. It also doesn't try to explain data structures or algorithms in depth, or in a way that builds intuition. The format is more like a quick intro and then teaches you some optimal ways to tackle the problem. You'll need to find another site to feed you problems to solve like leetcode.
  • Intro to Algorithms This is a great reference. I pull this out when I need to understand a topic deeper. If what you've found online isn't satisfying you, this book likely has the answer. It shows the mathematical and computer science underpinnings of topics at an academic level. However, I DO NOT recommend trying to read it cover to cover or using it to learn a topic you haven't been introduced to before. This is a college level textbook that can be used as a reference.

What technical interview resources have I personally purchased or used

What Python resources have I personally purchased or used

Go to pythonbooks to see a breakdown of highly rated books by skill level and topic

  • Learning Python, 5th Edition I love a good textbook. This is no longer updated though
  • Automate the Boring Stuff Their method is to teach you the basics quickly and then throw you into building projects. I do agree that forcing people to build stuff will make them figure out stuff on their own. However, I like the other products more for my way of learning. I come back to this when I want to learn useful skills and projects
  • Fluent Python I haven't gotten to this yet. It came highly recommended so I can't wait to tackle it after I graduate from Hack Reactor

What other career-related resources have I personally purchased or used

What computer science-related books have I personally purchased or read for fun

What Artificial Intelligence (Machine Learning) resources have I used?

Watch some videos from Michael I. Jordan on what AI/ML is and is not here for lecture style or here for a podcast

Terms like Artificial Intelligence, Cybernetics, Machine Learning, and Deep Learning describe an emerging interdisciplinary field that takes years of study and practice to become competent in. People often enter the field from backgrounds in computer science, data science, math, neuroscience etc. Some folks take the "hands-on" approach while others spend years attaining math maturity. If you're interested in working in the field, and not just learn enough to use it as a hobby or to solve some of the problems you encounter in your own field, I encourage you to talk to people in the industry, write down your priorities, make a 5 or 10 year plan, and backwards plan everything you need to do to be successful. Your daily actions should feed into your priorites.

About

Everything I learned transitioning out of the Army

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published