Software Engineer Learning Resources

Today, computers and technology have become part of every aspect of human life. It touches all the sectors medical, food, transportation, travel, entertainment, sports, just about everything. In such a world, where software applications are such a crucial component of the daily operations of humans, it is the responsibility of software engineers to get software applications right.

As we see how software is having an impact on other sectors, there is always innovation going on within. There are always better tools and technologies, improvements in techniques, and discoveries being made in various lifecycles of software.

The lifecycle of software is,

  • Design and development: creating the software itself, using programming language, and database, coming up with architecture, writing software, doing testing, etc.
  • Delivery: depends on the mode of consumption, could be end-user mobile/web apps, SAAS products, desktop apps, embedded software in cars, software in safety-critical environments, etc.
  • Maintenance and support: deals with the aspects of bug fixing, additional feature integrations

Internal to each of these aspects, there are further stages involved, tools involved to efficiently develop and have confidence in its working.

As we can realize, developing reliable software is a complicated task, and we (the world) need just that. Make no mistake, computers are purely unbiased with who designed the software or wrote it or who is using it, if there is a bug, it is a bug and it’s going to blow up. Therefore it is the responsibility of every software engineer to continuously be invested in their own self-learning, improve their skills, and be adaptable to new tools and techniques. And develop reliable good softwares.

There are going to be some engineers, who are involved in creating the tools, platforms or in otherwords system software developers, while other engineers are going to be creating real-world software. It is important for everyone to be engaged in self-learning, get skilled and develop confidence.

These notes contain some of the resources I have used for my learning… Most of it is primarily helpful for Software Engineers with experience of 1-3 years.

Concepts

  • Programming
    • C or CPP – Knowing these helps low-level concepts of programming, such as pointers, memory allocation/deallocation, etc.
    • Java, C# or Go – Knowing these helps understand concepts like language runtime, VM, garbage collection, a foundation for patterns for developing large-scale applications, etc
    • Python or Ruby – Knowing any of these would help in rapid scripting to automating oneself
    • SQL – there is a lot more to SQL than simple SELECT *, for now, learn some basics stuff, from Group By, CTEs, and Window functions. Some people think they know SQL all around, but probably haven’t seen this yet.
  • Data Structure and Algorithms
    • Knowing when to use what Data structure
    • Having a good grip on time complexity and memory complexity and making it a habit to notice these in any code that we see and write.
    • Which means one needs to know the main/common algorithm patterns.
  • Operating Systems
    • The best way to learn the operating system is probably using a flavor of Linux
    • Some basic must-knows are,
      • Monitoring CPU, Memory, and Disk usage
      • Processes and threads difference
      • Monitoring various aspects of a single process, like its own CPU, memory, network, disk usage
      • Difference b/w memory and virtual memory, etc
  • Computer Networks
    • OSI model, Basics of the web work, from DNS resolution, TCP/IP, sockets, and common L7 protocols
    • Fair idea of networks and subnets
    • Concept of NAT, firewall basics, tools such as – traceroute, ping, telnet, wireshark, etc.
  • Databases
    • RDBMS – PostgreSQL, MySQL, Oracle, Microsoft SQL (any one of these)
    • NoSQL – Document DBs: Mongodb/CouchDB, KV DBs: BigTable/HBase – anyone
    • BigData – BigQuery, Hadoop, Spark, etc. fair idea is enough

Tools

  • IDEs (Intellij, PyCharm, VS Code, Eclipse, NetBeans – anything)
  • Text Editor: sublime, vs code
  • Version control: Git
  • Code development workflows: Github, Pull request, Code review, etc
  • Task management: Jira, Trello, etc.
  • Cloud: GCP, AWS, Azure (anyone), one can simply do their own learning by utilizing free credits and later paying a small amount
  • Linux Terminal and shell scripting: comfortable using terminal and small script writing.

Coding Problem Solving

  • Leetcode
  • Hackerrank

Websites

Technical blogs of tech companies, a couple of examples below, but just about every famous tech company has a blog,

Other open-source news and blogs (examples only, but there are a lot more such credible websites)

Tutorials to keep following for new articles

Video Courses

  1. CS50 – This is a highly recommended course for CS Fundamentals. For people coming from a non-computer Science background (or if the college degree didn’t teach anything, which is pretty much the case with all the Engineering colleges in India), this course helps to get the fundamental concepts.
  1. Google’s course on Data structures
  2. MIT lectures on data structures
  3. Java – Udemy course which I found useful. There may be better/free ones out there on eDx, YouTube, and Coursera.
  4. Linux – Udemy course which I found useful. There may be better/free ones out there on eDx, YouTube, and Coursera.

One should find such courses by previewing and randomly checking a few lectures to make sure the course or playlist is good.

Youtube

Some of must watch

Some great videos

  1. YOW! 2018 Brendan Gregg – Cloud Performance Root Cause Analysis at Netflix
  2. How Did We End Up Here? • Todd Montgomery & Martin Thompson • GOTO 2015
  3. Mining Bitcoin with pencil and paper

Playlists

Individual’s channels

Good channels

Podcasts

These can be found in Google Podcasts

  • The InfoQ Podcast
  • CodingBlocks
  • Command Line Heros
  • PythonBytes
  • Talk Python To Me
  • The ChangeLog
  • The Cynical Developer
  • Inside Java
  • Base.cs
  • Cppcast
  • The Cloudcast
  • Masters of Scale
  • Scaling Postgres
  • Software Engineering Radio
  • This Week In Linux

GitHub Repos

  1. Developer road map – https://roadmap.sh/
  2. https://github.com/kamranahmedse/developer-roadmap
  3. Coding University – https://github.com/jwasham/coding-interview-university

Books

Technical

Personality Development

Apps

Leave a Reply

Your email address will not be published. Required fields are marked *