Response 1 to Mr. (/Eng.) Jnr-Hare: Introduction to Software-Development: Why and How?
Tags: webdev, buildinpublic, juniordeveloper, beginners
Published: 2023-09-13 12:47:08

Dear Mr. (/Eng.) Jnr-Hare (AKA J-Hare [ @envitab ],

Thank you so much for your letter; I was very (pleasantly) surprised to receive and read it! After all, most engineers—especially the [hares](https://www.codementor.io/events/a-pep-talk-for-the-tortoise-learners-of-software-development-gei3trmbd3) like you, tend to think of me and my kind (the turtles) as simpletons, or certainly not professionals that can—or should—be consulted! Regardless / in any case, let me try to offer you some good answers to the questions you posed in your letter. 

**

## Why Learn Programming / How to Begin / Choosing the Right Languages & Tools, etc.
**
**_I–Complexity and Worthiness_**
First, let me try to address your observation about the complexity of the software-development field, and your soul-searching about whether or not it is worth pursuing, given such complexity. And on one hand, your observation is spot-on: software-development is a complex field. 

After all, any junior turtle—or even hare—might wonder: what in the world do these engineers mean by terms such as backend, DevOps, or Model-View-Controller?! Moreover, in light of both your humility and apparently very high IQ and wisdom, I am sure you’ve also considered whether it might be more lucrative to get into the world of native-apps—i.e., iOS, Android, and others, not to mention related fields like data science.

But here’s the good news for you, Mr. J-Hare. Yes, the world of software-development is complex—and it seems to get increasingly more and more complex by the day, because of Moore’s law [](https://en.m.wikipedia.org/wiki/Moore%27s_law) and other factors (e.g., new advances with ML and AI). But this is also a world that: 

- 
i) Anyone can get into, as long as they are as humble and eager to learn as you are. Its entry-barriers are low, versus fields such as medicine, accounting, law, etc. 

- 
ii) After learning the basics and establishing habits of continuous practice and learning, believe it or not, Mr. J-Hare, you will find yourself at par with many senior—and/or (seemingly) “smartest”—engineers! For instance, there will be days on the job when YOU (yes, “little old” YOU, J-Hare!), will be catching and debugging issues that your supervisor (possibly a graduate of MIT or Stanford) will have missed!

**_II–Getting Started—Part A_**
And guess what, Mr. J-Hare? I have more good news for you. The fact that you’re asking these questions—yet you have a GH profile[](https://github.com/Tabintel) with several repos, is evidence of the fact that…(drum-rolls)...you’ve already become a software-engineer! But hold on! Before you start jumping up and down in joy, let’s first make sure that you’re really on a firm footing; i.e., with a clear overview schema of the field, expectations vis-a-vis progress and challenges, etc. 

So as to help you with a quick overview of what the field of software-development entails, please take a look at diagrams such as the one below. Overall, it helpfully lists a total of five groups of languages, libraries and frameworks, and other “tools” vis-a-vis the sub-fields of i) front-end, ii) back-end, iii) databases, iv) DevOps, and v) mobile apps.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vd40gtaor7bs6vnn772j.png)


Ultimately, the world of software engineering might be conceptualized as composed of roughly (and yes, please note my emphasis on this word) three contexts: I) Front-end; II) Back-end and databases; and both these specializations might be for web- or native-apps, and III) Full-stack engineering, which combines the two major fields. I would also add DevOps into that last category.

**_III–Getting Started—Part B_**
First, learn the fundamentals. And please don’t try to learn 5 different coding languages at once! Rather, you might benefit from learning C—a basic root-level language [](https://en.wikipedia.org/wiki/C_(programming_language)) used to build “operating systems, device drivers, protocol stacks (per Wikipedia, 2023),” and/or JavaScript, given its role as the foundation of most web-applications. I would also learn 1 or 2 “Object-Oriented Programming” languages–e.g., Python or Java[](https://en.m.wikipedia.org/wiki/Object-oriented_programming). Try to also learn the basic mechanics of the field. E.g.: 
1) At their most basic level (as David Malan or other instructors of Ed-X/Harvard’s CS50 [] (https://www.edx.org/learn/computer-science/harvard-university-cs50-s-introduction-to-computer-science stress)), most computers or digital machines are using binary code [](https://tinyurl.com/4uxftxcu). This implies a number of important concepts for you to understand, including the following question: before we get to the level of software, what do we mean by hardware[](https://en.m.wikipedia.org/wiki/Hardware), firmware[](https://en.m.wikipedia.org/wiki/Firmware), CPU memory or “cache” or memory[](https://en.m.wikipedia.org/wiki/CPU_cache)?
2) Do you understand the importance of—and are you striving to learn—algorithms and data structures [](https://www.freecodecamp.org/news/learn-data-structures-and-algorithms/), regardless of the languages or your chosen tech-roles (i.e., front-end, back-end, and especially, for full-stack purposes)? 

**_Realistic Expectations and Challenges, and Next Steps_**
To close out this first letter to you, Mr. J-Hare—also in response to your queries: 1) Like Nike, “just do it”—get started; don’t be a coward! 2) However, please understand that the journey won’t be easy, neat, or linear. You’ll experience setbacks, self-doubt (/impostor syndrome), and other causes of demotivation. But remember that wise Chinese proverb, re: “a journey of a thousand miles…”[](https://en.m.wikipedia.org/wiki/A_journey_of_a_thousand_miles_begins_with_a_single_step). You can do this, Mr. J-Hare [ @envitab ]!