I am not a beginning developer, or a beginner developer, or a novice programmer, or any other variation of the term. I am an intermediate developer. This means I have mastered the basic skills required to develop a solution from start to finish, with a wide variety of different toolchains. If Software Engineering were a medieval trade, like blacksmithing, I would have reached the Journeyman stage of my development. Traditionally, the journeyman stage was quite important, as it marked when a tradesmen became eligible for full "employee" status under a master. This meant a few very important things, he was able to be paid for his work and his work now reflected back on his master and the trade guild. It also meant that the tradesmen was able to start working towards their own master status and running a business of their own, if they so desired. Reaching master status often required producing a masterwork of some kind to be judged by the guild, and producing this would require learning from different masters, often resulting in journeyman years being marked with travel to work under different masters. It is this aspect of traveling and learning that I want to specifically discuss with regard to the Software Engineering field.
Software Engineering also has a journeyman stage in professional development, it is just generally referred to as a "Junior Developer Role." Your bog-standard junior developer generally has one main goal: to no longer be a junior developer. They may not realize this is their goal, they may think it's "to make more money", or "to become a better developer" or "to find a specialization." These goals are all good motivators, but generally junior developers want to move past the intermediate stage and into the advanced stage.
There are a few ways that the enterprising junior developer can go about this. The most obvious and probably the best is mentorship. If you are lucky enough to be employed at a company who cares about developing the skills of its green developers and provides you with mentorship, be grateful, because this is far from the norm. Most places see junior engineers as chattel, or worse, interns. These are the kinds of places that will load you up with more work than you can possibly handle, and pay you peanuts. Then when you inevitably fail, place you on PIP for a month and fire you. No growth, no recommendation, nothing. Mentoring is a lost art in the professional world in general, and its death is most evident in the software world.
The next best way is open source development. Open source is a great way to learn anything, if you can get stuck into a project and dig in there. It's probably the closest thing to a journeyman program we have in the tech world, as you can learn from some truly great programmers and engineers that way. However, it can be difficult to actually join an open source project in a meaningful capacity. Many have strange practices that will be unfamiliar to a young zoomer such as myself and my peers, like using mailing lists for one. Worse yet, some open projects are run by people who care more about ideology than technology, and those should be avoided, lest ye risk cancellation (Thankfully, these usually make themselves known very easily, just look for the warning signs). However, once you find a good project it can be a great experience (and helps to build those connections recruiters are always raving about).
The last and worst possible to go about your journeyman stage is self learning. Self learning doesn't work because it is almost impossible to verify that what you are learning is correct, as you don't know what you don't know. This can lead to countless hours of wasted effort, or worse, form bad habits that need to be quashed. This state of affairs isn't really helped by the rise of predatory """elearning""" sites, and the absolute state of bootcamp and startup culture. Most people who are forced to engage in self learning seem to find themselves in an endless cycle of "learn thing X, find out thing X doesn't work, learn thing Y" etc. It's tutorial after tutorial after tutorial.
But the real issue with self learning isn't even that, it's that 90% of all tutorials and elearning is tailored towards the absolute beginner. This does make sense, as beginners are most in the need of learning, but there comes a point where wading through the 300 tutorials on how to initialize a project on framework X to find the one that explains the use of framework X's poorly documented feature Z that manager Y has decided will solve whatever the current issue is.
Admittedly, alot of this comes from the fact that my day job is full-stack web-dev, the systems programming world is somewhat different. I have gained more knowledge from bits and pieces of those books that I have in hundreds of hours of online courses and thread cruising on stackoverflow.
Naturally, I state alot of opinions here, and this sure is one of them. This blog has certainly turned more into a place to post personal screeds more than anything else. I don't really mind, it's nice to do something tangential to programming without actually doing programming. Maybe my unstructured thoughts on this topic will coalesce into something more tangible at some point. But for now, it's just rambling.-ShockTohp [link—standalone]