A Resilience Advice For Programming Students

Marcelo Valls
5 min readMar 19, 2021

--

Sometimes the number of technologies to know can be overwhelming. Do not panic!

Photo by Tim Gouw on Unsplash

that-is-not-a-full-stack-dev-meme.jpg

Very often I see claims about the tech stack requested for a Software Developer/Engineer position. Generally, these claims take the form of posts in social media and, why not, LinkedIn.

Also generally, these posts are made by programming/engineering students, although I’ve seen some active developers sharing the very same idea.

I’m talking about memes, or some aggressive or sarcastic reply screenshot referring that the requisites for a Software Engineer position are practically impossible to accomplish.

Screenshot from a message I got.

The text on the screenshot is in Spanish, but it says something like this:

To my IT fellowers, or to the IT Client who reads me. If you are looking this profile: Java + Python + PHP + …. etc

That is NOT a FullStack Developer
That is an ENTIRE IT department

I believe that this kind of behavior does nothing but damage the profession, encouraging future developers to be disbelievers about what they clearly are able to learn and do. If you strongly believe that the memes and the sarcasm are the right way to go, then you probably shouldn’t keep reading, but if you are not, maybe you can get a bit of advice about getting some tools into your toolbox.

Warming up…

Let’s put it this way: You are fresh starting in the programming world, and you’ve heard that Python is a very friendly language to begin with. After a while, you decide to move on a more academic path (a web development course or a degree career), and you start with the very basis: C, C++, or Java. Then you learn some basic sorting and searching algorithms, and some basic data structures such as arrays, vectors, lists, and maps/dictionaries. In some higher levels, maybe you can see binary trees. What about data persistence? Directly to the filesystem as binary files. What about the User Interface? The old-fashioned Terminal/DOS will work just fine.

Finishing this first part of the learning journey, some teachers encourage you: “There is an extremely high demand for software developers, you could get a job very quickly now!”.

Panic attack!

So you go to LinkedIn (or any employment platform you like) and you find something like this:

“We are looking for a Software Developer with proficiency in:

  • HTML5/CSS3
  • ReactJS or Angular
  • NodeJS + MongoDB
  • Python
  • Java / Scala / Kotlin
  • MySQL / PostgreSQL
  • Unix Servers
  • Git and CI
  • Unit and Integration Tests
  • High scalability and availability systems
  • Design patterns”

Even though you did such an effort, you barely just know Python (and in a very basic way). Here is where you begin sharing the posts I was talking about at the beginning:

  • “That is not just a developer, that is a whole team”
  • “You can’t know all these technologies”
  • “They want to hire one dev to work like five!”

Chill, dude!

But you know what? A developer actually can know all these technologies, and even a lot more.

Photo by Markus Spiske on Unsplash

First, several of the requested technologies complement each other, so knowing a considerable number of them isn’t impossible at all. If the employment announcement would ask for, let say, 20 different programming languages… ok, that seems difficult. But if 4 of those technologies are programming languages, 3 are development good practices, 2 are database engines and the rest are just tools, the situation is completely different.

Second, any decent software development career has signatures about databases, complex algorithms, architecture, system design, several programming languages both low and high level, design patterns, etc.

I mean, the fact that you only know how to make a CRUD system for stock management that persists data in binary files with C++ is just a consequence of the little path that you’ve walked.

Real facts (one of many)

In my particular case, I started studying programming as a self-teaching. First with Python, then with Java. To improve my toolbox in order to search for a job, I made some programming courses: Java Web + MySQL + Introduction to Object-Oriented Programming. The Java Web course includes a few classes about the Hibernate ORM and the Struts Framework (by that time it was already kind of an old framework).

At this point, my knowledge was limited to:

  • HTML
  • CSS
  • Java (Struts + Hibernate)
  • MySQL

Then I got my first job as a Java Developer. The company’s tech stack was a little different from what I already knew, so I had to learn about Spring, DB2 (another database engine), jQuery, SVN (version control), and Jira. With this experience, I reinforced the basis I had and added new techs to my stack: Spring and DB2.

  • HTML / CSS / JavaScript
  • jQuery
  • Java (Spring, Struts, Hibernate)
  • MySQL / DB2
  • Jira
  • SVN

After this first job in the IT business, I went through a lot of other jobs for almost 10 years up to now, and in each one of those jobs, I applied some of my knowledge (reinforcing them) and learning new skills. Of course, it is also important to learn outside the job too.

Nowadays I work in a company with hundreds of microservices-oriented systems, each one of them solves a particular problem, using a particular technology stack.

Does this mean that I know all those technologies? Not at all! But surely I can state that I know, and I have some proficiency working with all the technologies that I mentioned at the beginning of this article.

Final thoughts

My history is not an exception to the rule, on the contrary, I think that I’m an average software engineer, one of many. I started working with Java, just as I could have started working with NodeJS, Python, or .Net. Please, don’t think of me as an exceptional case: nothing could be further from the truth. Any developer reaches a point in his/her career where he/she knows an interesting number of technologies.

Don’t feel discouraged by not knowing even the 10% of what a Software Developer/Engineer job description asks for, and don’t let that motivate you to discourage others by posting memes or pictures saying that it is all impossible. It isn’t. Take those job descriptions as a guide, as a roadmap, as things to learn so you can be the developer that you want to be. Transform that “unreachable” requirements list into your target, and you will be there before you even notice.

It is possible. Very possible.

Thanks for reading!

--

--

Marcelo Valls

Just another Software Engineer who loves programming, reading and teaching