Hello Everyone,
I haven’t been on here for a long time so I’d like to share my progress in the hopes that it helps someone who may need it.
Career History:
My introduction into programming starts at a young age when I attempted game design all the way in the late 90s to early 2000s. I was terrible at it but managed to build a few open world and 3d models. At that time the language was in C# and I remember buying a book on it in the hopes of learning it. Unfortunately, I did not know any programmers in my immediate circle and the schools I attend did not focus in anyway on computer science so I was at a loss. With everything looking like hieroglyphics I gave up and switched to graphic design where I was mildly successful.
I continued this trend, using my skills to freelance various projects and, again, noticed that while it couldn’t pay the bills I could gain something from it. Assessing my capabilities at that time I realized a few things. Communication is by far the most important skill. And I don’t mean this in the way of being able to hold a coherent conversation with another person. I mean in the way described in communications research where understanding the culture, symbolism and belief of an individual/group/workplace and their rituals is paramount as described in a theory by James W. Carey.
In essence I learned how to negotiate, I learnt what it was, why it was important, and how it applied to my capabilities and how it could be used to be successful in freelancing. Nevertheless this was around the 2008 crash and I knew freelancing alone couldn’t pay the bills so I took several jobs working as a janitor, bus boy, cook, musician and even a little construction. I didn’t care what I did and the job didn’t matter as long as the bills could be paid all while applying my skills in communication to establish connections and a network so that I would never worry about finding work.
I was modestly successful in this venture and it taught me several things. I’m not the sharpest tool in the shed but I have the will, drive, and grit to make up for it which is, sometimes, more valuable to a client than raw talent. Nevertheless, I had a chance opportunity somewhere around 2015 to enroll in a bootcamp at the recommendation of a friend. I looked into the syllabus and remembered my days of messing around with C# and thought I’d try to learn the fundamentals first. Thus I bought a book called “How to Prove It” by Daniell J Vellerman which changed the trajectory of my career. It is hands down the most important book of my life which I refer to regularly. Upon starting the bootcamp they introduced us to javascript, NodeJS, Meteor, expressJS ect I soon noticed that the concepts described in the book could be applied to JS, things like
“If P(x) then Q(x)” is equivalent to “not P(x) or Q(x)”,
Which was helpful in reducing the complexity of “if else” statements surprising my instructors where they insisted I had a talent for programming upon which they recommended me to freecodecamp.
After finishing the bootcamp with honors I was well off in the several jobs I was working so didn’t feel the need to pursue a job as a web engineer. During that time I completed the frontend and javascript portions of the FCC code challenges while working on various toy projects at the time. Some of which I’ve posted on this very forum. Unfortunately I believe I developed a false sense of accomplishment since I was sure I had “reached”. This comfortzone I had put myself in continued until COVID-19 hit.
Since I had grown accustomed to working everyday of the week it felt weird just having nothing to do when all the business I worked for closed. I wasn’t particularly enthused about taking unemployment and had a nice savings going so I thought I’d use that to officially pursue Computer Science in college. I honestly thought it would be like the bootcamp or even FCC but to my surprise it was not at all like that.
I believe FCC and many bootcamps try to teach without core fundamentals. What I mean hear is that the college went over how a machine stores primitives, objects, arrays etc. in memory, how to build flowcharts that could be rendered down to pseudo code that could be applied to any language. They taught the essence of true OOP and why it is useful in enterprise applications for readability, modularity, and architecture. For instance going back to the calculator app which I wrote mostly using functions I realized just how terrible it is. I had thought I had written a masterpiece when in all actuality a senior dev would vomit seeing the messy for loops and ridiculously nested if statements copy and pasted all over the place with no real reason or thought. It was then that I truly realized just how terrible of a programmer I was and how much of a science programming truly is. I cannot stress enough that FCC/bootcamp was not enough albeit an excellent augmentation to inform my mediocre intelligence of the ways of programming.
Perhaps even more insightful, I took courses in communication and economics and made it a point to regularly discuss with my professors to find out what more I may be missing. This was unbelievably essential as I was talking with people in the field with actual experience who were willing to engage with me and offer personal advice. From my communications professor he taught me how to interview and established the importance of being a culture fit despite talent. He gave me a structured method for passing an interview 70% of the time, establishing connections, emailing properly, and jumping the line which has actually worked for me. From my economics professor I learned my place as an employee. Why some establishments can pay $55 an hour while others pay much less for the same body of work. How to know your place in such an establishment and assess career mobility.
Then I lucked out and was granted an internship by one of my professors to work at an Agency. What I learned there was not at all what I was expecting. My professor was a data scientist with a background in .NET development who had left a high responsibility/paying job for something with less stress. He had an expert command on SQL/PHP/JAVA/C++/C# and backend technology as a whole however not so much frontend but was more than capable of applying it. I was surprised with his product first approach and speed at which he could apply it. He didn’t care what language tech or framework he used as long as it got the job done according to the clients request and was capable of using any tech to do it. If a manager asked him for something his usual reply is sure thing I can get it done by this date and sure enough by that date it was done. If he got stuck he already had several plans and a list of people he could communicate with to get around it. It was there that I realized the unreasonable effectiveness of the core principles of CS. It turned out that in his experience he had developed a set of solutions/design patterns based on the core principles of computer science he could apply to any language and thus was able to use whatever infrastructure possible to get the job done.
I have currently graduated from the position of intern and granted a part-time position as a junior-dev while being mentored by him. As I am hungry to learn as much as possible. I’ve also applied what I’ve learned in communications and economics to land a full time contract working along with another Senior dev who also displays the same qualities/attributes, to take any tech and effortlessly apply any solution within them whenever possible.
It is still early in my career to say I have reached and I am still very much in the trenches however I have learned some valuable lessons I hope to share.
In Summary:
-
Programming/Coding is much more than just code. Economics, Business acumen, communication and psychology, basically soft skills, take up as much or more than coding capability.
-
Experience is a necessary requirement. A senior dev can tell your capabilities from just how you speak. In an interview many could immediately tell where I was at even if I tried my best to fool them. However many are willing to work with you if you are a culture fit or they see potential.
-
Invest in learning the core basics. I mean set theory, algorithms, hash tables/mapping etc… how to read papers and cite them where they apply in your field. Actually it’s a good practice to read publications from researchers in your field and familiarize yourself with the concepts. In your spare time try to write your own SQL language or even your own framework etc. Even if you fail you’ll greatly understand where certain tech fit in.
-
It is not possible/highly-improbable to just change careers into tech without years of experience or without a genius IQ or substantial exposure. Programming is a science. It is difficult. However it is possible to get lucky and I believe there are more opportunities today, no matter what level you are, than ever before if one is willing to be patient and lean A LOT.
-
Lastly do not invest in just one tech stack. So far I’ve had to write things in Ruby, PHP, PostgressSQL, MySQL, JAVA, NodeJS, Flutter, TypeScript… Many times a senior dev has come up to me and said okay we’re working in Python today and this is what we need to do. They usually don’t have time to entertain questions about it so you’ll have to read the doc and figure it out for yourself. If you can’t then the Senior dev has to take over adding to their workload which means the project is going to be behind and they’ll have to explain to management why. Usually they understand however and aren’t mean about it if and only if you’ve aligned yourself with a caring mentor.
Finally I’d like to thank the mods at FCC and the contributors. Especially @kevinSmith who has offered great advice during my time at FCC. Please feel free to discuss, debunk refute anything here you may agree or not agree with.
Happy programming