As beginners, we started with a certain programming language. We learned that language' features, and maybe moved on to basic concepts like data structure, algorithms afterward. At that point, we became certified coders.
One day, we heard about systems designs, coding patterns, agile, software frameworks, testing, etc., and realized that we're not certain in which ways our coding skills can be applied to a real-world software development.
When was that? How did you feel at that moment? How did you find a path to overcome that learning curve?
Top comments (22)
Personally I always feel that I don't know enough. I'm now learning more enterprise-y things, architectural patterns (I am a backend developer), systems programming, functional programming sometimes, but the feeling of learning enough is quite short lasting. I believe it's more a mental problem than the problem with my skills, so I just try to enjoy what I am doing and don't hurry!
I totally get you - the feeling that you don't know enough will be there even when you're on top of your game. Things are changing so quickly that by the time you master something new, another version of it has come up.
For me, it was the moment I started solving harder programming problems.
From Brian Holt - Having Empathy while Teaching Programming:
As knowledge grows, so does the boundary of "knowing what you don't know".
From that perspective it's never "enough" but just a continual re-assessment of which part of the boundary is most valuable to expand right now.
FYI: E. W. Dijkstra, 1993:
"Ours is the task to remember (and to remind) that, in what is now called “software engineering”, not a single sound engineering principle is involved. (On the contrary: its spokesmen take the trouble of arguing the irrelevance of the engineering principles known.) Software Engineering as it is today is just humbug; from an academic —i.e. scientific and educational— point of view it is a sham, a fraud." 😁
"Engineer" is a legally protected title in many countries and you need substantial experience and knowledge to achieve it. In my country, it is equivalent to a master's degree. Software engineer, even with the keyword in its name, is still not a real "engineer" by the law. Using this perspective, I think I understand why Dijkstra said that.
Many times, I only use the title "software developer" to explain my job to people who are not in the field (e.g., family) to not confuse them. That said, on the job market, "software engineer" may sound fancier and provide better results. 😆
Thank you very much, I didn't thought about it before, great insight!
I've been building websites since 2005 and I've never felt like a "software engineer". I think it's just a title silicon valley came up with to add "prestige" to the job or something.
We used to be "web masters" and "site managers", though mostly "web developers".
The first time I felt real pride in doing something was after I spent 6 months writing 80k lines of code and built a text-based mmorpg. It was small, didn't go anywhere, but it was mine. That's when I knew I could do this stuff for a living.
Titles in this industry are mostly nonsense and I've yet to encounter a "guru" or "unicorn" or "whatever dumb name they made up" code any better than just the developers I've befriended and worked with over the years.
Usually when someone flaunts a big title [mine's officially "Senior Web Consultant" btw] it's just to brag and mostly not even that humble of a brag.
I find pride in my work and I build things that I hope will last. My oldest still functioning website is now 11, it's my pride and joy, but has a lot of siblings. I hope to keep adding more of them over time.
What anyone calls me, is irrelevant.
Certainly a title does not determine me as an individual, but I believe it should reflect myself to a certain degree so even a stranger can have a sense on what I offer. In other words, what people call me is valuable.
You rightfully earned a title "Senior Web Consultant", so probably "Software Engineer", "Web developer" or something along the line is fine. However, if someone calls you a IT manager, DevOps engineer, DevRel engineer, SRE, cloud engineer, etc., such titles that do not reflect yourself might be an issue (marketability).
lol IDEALLY, you'd be right. But in this industry, i've seen "senior devs" who don't light a candle next to some "junior devs" and i've seen "frontend devs" who can't do CSS, and "backend devs" who can't setup a server.
Titles in this industry are meaningless. They only hold value as far as a career within a particular company and the attached salary.
For example, "frontend developers" at my company know more than most "full stack devs" i've met, but they're not as good at it as our "backend devs" who are also full stack, but just don't do frontend.
Our "project managers" know more code than PMs at most large companies I've worked with because most of them are business oriented and not tech oriented.
In the end, like i said, in this industry, it's meaningless and mostly ego-driven.
That sounds reasonable to me, and that's also why I believe title has little meaning at the start. I can only claim a title when someone acknownledges it, be it either a community, or an organization. Admittedly, as you said, the scope of that title maybe releavant in a certain group (e.g., company).
However, on a first look (i.e., resume), a person at senior level with XXX years of experience is more eye-catching than a recently garduated student, so it has effect in terms of marketability. Still, if I call my self a "Senior full-stack engineer", and a hiring manager decides that level does not suite me, then the title is useless in that regards. I have to prove that title is applicable me after all (via interview, project contribution, etc.)
Dont mind me lol, I just wanted to chime in and say, I still remember the term "Web master" from websites in the 90s. As a kid it always carried more lore or mystery than I could ever understand, so its interesting to have it put into proper perspective now. I'd say the more accurate and overall modest term is probably "Web dev". "Web master" sounds a bit excessive and "Software Engineer" a tad pretentious but I suppose appropriate none the less.
I've been a coder since I was 12. Sometime in highschool I became a programmer as I started diving deeper, I'm a JavaScript nerd, so going from HTML, CSS, and some PHP to React/Nodejs was interesting. I've started becoming a software engineer pretty recently. I'm a junior in college so I've been learning some things like database design, or data structures/algorithms, and even had a class on software engineering. I think that class (soft. eng.) and getting an internship at a startup really started my journey into being more than a programmer. That internship lead to me being a lead full stack developer and lately I've been learning more about coding practices and architecture.
I was thrown in the deep end with some basic software engineering knowledge. For the last couple weeks I've been learning a lot. I just watched a great series about clean code by Uncle Bob. I've been learning about monorepo vs polyrepos. I started reading Clean Architecture the book. I also have two other books I want to read, Clean Code, and The Pragmatic Programmer. I also started learning design patterns or coding patterns which is interesting. There's so much to learn, and I'm probably not helping by learning multiple things at once.
Overall I think being curious on how to get better at what I love to do has had the biggest impact.
For me it was a few years ago when I read Software Engineering at Google book and learned the difference between programming and software engineering. It's a natural tendency to approach every problem as a programmer, writing code to solve a problem at hand. This is relatively easy to learn, I think. Software engineering is an art of its own: thinking in abstractions, designing interfaces for testability, and balancing between flexible design and eliminating waste.
That sure was a long journey! While I'm not aware of a language MK-85, I started with Pascal in middle school, which can be considered an exotic language now. The whole path (in about 7 years) was Pascal => Python => Java, but the choices were there due to the school curriculum.
One day, I decided to choose web development as a focus because I embrace its open-source nature. Things happen and somehow I landed a job. By having a job, I claimed the title of "software engineer" on paper, but still, I don't think of myself as a real "software engineer".
To me, a title starts to have its value, only when there are people coming to me (by themselves), and seek for my professional skills. Only that makes me feel my title is acknowledged. That day is well, far away, but I will try my best to reach that goal. 🎓
(Using software engineer in the Google sense from Software Engineering at Google.)
I became a software engineer when I learned about programs that have to evolve over long periods of time, and are worked on by a cadre of developers (who come onto the team, and leave the team), and need to adapt to an ever changing environment, and how to work with other people, and how to be nice to people, and how to be a team member who strives for the team to succeed. And how to answer the question "How will you know this bit of code works tomorrow? Next week? Next month? Next year? Next decade?" (One option is to manually test that code every single day, for the rest of your life. That's the bad option. If only there was a way to automate the testing of that unit of work.)
I started my Software programming role in 1987. My summary so far is yes, I know 6 major languages, how to debug well, how to write SOLID code, and write strong automated tests. I can trace network issues working 5 years on a computer communications team. I have 7 years front end and 25 years backend experience. I have learned well over 500 Apis, and 100 communications protocols.
But none of that matters other than I have those skills.
All of that above only happened because I learned new things every day. I developed the ability to use my job to expand what I knew on that particular job and bought books to read at night and weekends. This was both for new things and what I was doing at work.
Had I not stayed focused for that long I would have died an obsolete skills death. I only survive today because I constantly retool. In a sense, my leading edge is always at a beginner level which is most difficult because it takes at least 1 to 1.5 years to become a SME and you always feel worthless during that period.
Once I feel comfortable as a SME in my job, I usually get bored within 3 years. That's how I know it's time for new work.
I started learning about visual basics and DOM commands in my college in my teenage. Then later in university, I learned HTML, CSS, JS, PHP, Java, C#, C++ but now I only work on JS and sometimes HTML CSS.
I was good in my university and college but sadly programming courses I covered during schooling were very different than actual professional life. In my internship, I learned a lot of new things which I never heard about in my life. It was surprising for me but I learned it.
In starting phase of my career I was not confident in my work and profession. I used to scare of new things and my self-learning attitude was bad. Tbh dev.to helped me so much in self-learning. I got motivated by this platform and today I am happy to see myself as a software engineer.
My school courses also did not reflect real-world professional environment well, but I guess that is the same for everybody. However, they surely did give me a starting point and solidify foundation of computer science concepts.
I'm still in an early phase of career, so lots of uncertainty (sort of: "what if my work blow up the production?"). I guess this mental state will fade away over time, but certainly dev.to gives me a fair amount of motivation to go through this phase.
For me it was while using the Linux based os for the first time and with VSCode.
Although as a Linux user, I mostly use it with a daily plug-n-play user perspective so it does not give me a huge developer experience.
VSCode was completely opposite. Initially I started with a full-fleged IDE and everything worked out of the box. With VSCode, there were many things I needed to configure myself so that helped me a lot in learning about development environment.
here as i mean Like i was already learning coding in my college and my college uses the Turbo C++ for Programming (still Thetly are using) on windows but when college's library department decided to add Ubuntu 16 as Operating System For New Computers I Started to go there By Comparison of Windows 8 Education Edition and Ubuntu 16 LTS There That Version of Ubuntu Was Best That Time. That Time Ubuntu had there fame.
I started feeling like a proper software engineer after I learned the reasoning behind common programming principles and what makes good / clean code.
At one point in my job, I was wondering which approach would be best between two approaches proposed by me and another developer. I realised that I couldn't really make a strong argument for why one of them would be preferable. To me, that meant that I had gaps in my knowledge.
So I spent some time thinking about clean code and the reasoning behind it. I tried to reason about it from "first principles", as Elon Musk has also mentioned. Things like "what makes code easy to work with", "why is certain code easier to work with" (hint: it's because we, humans, have certain disadvantages that make certain things very difficult to work with), what are our limitations, what would result in optimal software development both in the short term and long term, etc.
So, from that, I learned the first principles of what makes good code. That was when, in my mind, I levelled up significantly as a programmer.
Now it's like, it doesn't matter what I don't know yet. I can learn it. New framework? No problem. Learning new things is basic programming teritory. New code pattern? No problem. It makes perfect sense if you understand clean code principles. Entirely new architecture pattern like top-down unidirectional architecture, MVC, hexagonal architecture? No problem, it follows from the basic programming principles.