DEV Community

Seif Sekalala
Seif Sekalala

Posted on

Response 1 to Mr. (/Eng.) Jnr-Hare: Introduction to Software-Development: Why and How?

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 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 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 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

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 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. 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 ), most computers or digital machines are using binary code . 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, firmware, CPU memory or “cache” or memory?
2) Do you understand the importance of—and are you striving to learn—algorithms and data structures , 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…”. You can do this, Mr. J-Hare [ @envitab ]!

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.