#shower-thoughts #computer-science
#Languages to speak as Software Engineer
We invented shit-ton languages, not only for programming - but I consider then as communication method between human and computer, same as we communicate human to human - as you might seen or not, all of forgein languages are structured or may be structure similarly to your native language - same is for programming languages, every programming language doing basically the same fucking thing which is input and output, there are fancy things like functions but functions may be known like routines or subscripts where underneatch it's the same thing. Always focus on concepts and structure of programming language instead learning "what you see is what you do" because you are human being not monkey.
I was thinking about it a lot, since I was really getting started with programming in 2014 (ecosystem was easier on 14 y.o. kiddo back then than it is today) and eventually even now in 2024 which is apperently ten years after first ever touch with code. A lot of younger people that are aspiring to be developers were asking me questions like "Which language should I learn?", "Which one is the best?" and other non-sense questions which I hope to resolve with this little article, post or whatever you want to call it.
#"Which language you should learn?"
TL;DR: None, GTFO
Let's put meat on the table. If that is question you have asked (and I send you url to this website) means I had no mood or energy to explain same thing over and over to same kind of people, remember that ignorance is a bliss and you can choose to understand why you lost it somewhere on the road or just close this page and forget I sent you this url. How do you think some anon or even your friend at some point will know answer to such simplified question like this. Shut your ass and listen the only truth that you will ever hear to question like you have asked.
#I did my choice.
I have choosen typescript
by age of 17 which was my primary programming language for 7* years. I was not asking a single fucking soul which language should I choose, will it pay my bills? is it the best option? are there better ones? or anything like that, I do not get it what makes you all to ask that question at the first place. But, hey... since you have asked question like this let's dive into it.
* I say 7 years however this do not include years of drug binges in my punk teenager years where I completly dropped programming, then come back, dropped it again and this scheme tend to repeat itself. It's a love-hate relationship. In real-world I was programming like programming maybe 1-2k hours in it before I got first full-time job.
It's important to remember even through "I made this choice" it was made way before I was even aware, the environment in which we grow or live is making us, no matter you like or not.
#What make me to do this choice?
TL;DR: I just liked javascript
because java
because I played minecraft and I enjoyed stupid applications on phone.
It's year 2011 where kiddy me was dealing with bukkit servers for minecraft and wanted to actually modify funcitonality of some plugin which eventually leaded me into seeing thing like java
which did not made sense to me so eventually I just ended up with editing xml
files, until I decided to write something on my own by 2012.
I can say by 2012 I was actually able to write simple java
input/output application but never has deeper understanding of software (like... how you made that final .exe that is installing on my computer and it just works), beside java
I was also trying to learn c
but I admit I have failed in learning it because I didn't had that much clue how computer work at all, I had more idea how to administrate operating system and components of my Windows 98 (didn't had hardware to go upper) operating system. I remember downloading jars to one of my very old phones and that was I guess somewhere from 2008-2010 (ffs i do not even remember phone itself just how happy I was downloading random jars from web and playing anno when I could, that was some nokia that had support for java apps).
So summarizing java
by the time, was like platform that was somewhere close to me by the things that I were doing, and it had impact later on. My younger brother (born in 2008) for example have touch of lua
just because he was playing roblox where I didn't seen lua
in my lifetime, I strongly believe people who had bigger touch with linux when they were young ended up with c
programming as this was familiar thing to them, sadly not for me.
#Learning Web Development
It's 2016, I have been learning about basic of web development because I was deep in cryptocurrency communities and made UI/UX Design for some ICOs (was official part of Rays Network ICO which paid me 200 USD for whitepaper design which was damn huge at the time) - one client once asked for UI that I have designed as the only thing I was able to do at a time were copying css from Adobe XD as it was and just pasting in HTML which resulted in completly static website of which client was not happy at all. When I was learning basics of web development I loved javascript because it was looking familiar to me because I know a little bit of java before. At the time I had talk with one High-Frequency Trading firms about potential intership however with unlucky ending because of my parents, that would change my direction strightly to rust but that's a whole other story full of regret and lost opportunities.
So let's say by 2016 I was able to build a website that was somewhat responsible without frameworking or anything at all, ofc just interfaces that were actually simple enough - nothing complex but I could do a little of interactive things, I was horrible at it - however it all was getting better from month to month.
#Is TypeScript a my loved JavaScript 2.0?
I have discovered TypeScript someday, just because onday I have contributed to Atom editor to some YAML-related extension and have seen CoffeeScript which was also superset of JavaScript. Started "using" it like few months after I have discovered it and was building things in TypeScript but I didn't really used all of TypeScript functionality as I didn't knew type theory at all. I was learing it by building things for people and eventually paying fees for failed contracts one after another and it was actually bad time for me as I badly needed cash and could not really get into it even through I was try-harding as fuck, yet I never left language at all - I was never considering another options when it come to programming language, i just like... like fucking liked it and wanted to get good at things.
#Let's wrap what I try to tell you...
- It's a individual decision which should be made by you.
- It's decision that will write longer or shorter story in your life.
- You should be minimally aware about things you want to build - you should know what technologies are used to build things that you want.
- Even through I was learning things just to get paid I would not recommend that to anybody, my way was still somewhat familiar all the time and I was not jumping somewhere where I didn't belong.
- Think what part of software you like, which platforms are familiar to you and use tech associated to them - like as a linux user I do not see myself programming windows software in c-sharp, it's like programming app for android while using ios phone or being mechanic without car - you need to be familiar with things that you are working with.
#What drives me to conclusion...
No matter in which pattern I would try to come down to question you have just asked it drives me to only one place where you actually have no clue about software at all yet you want to build software - because let's say when you want build a website, you would just ask for it - then found out HTML/JS/CSS and you just fucking know what you need to do next - and same is for every software I can think of.
Like, what does programming language change at all when you do not know what to fucking build or what you want to be doing? Like even if you would actually want a job as software engineer you would just ask "What software engineer does?" and then google what software is, what are components of it, what's the process of building it and you like have minimal overview of the things - you can decide which you would like to potentially do - try them - see if you like it - and eventually decide to stay with thing.
It's like asking painter which brush to use, it have no fucking sense because it all depends - mostly depends on thing you want to draw and what you have - how people should know what the fuck YOU WANT TO DRAW? when even you do not know that - and if you do not know what it means... it means mostly that you should not be in place you are at the first fucking place, there is nothing bad with lack of knowledge BUT YOU ARE FUCKING CLUELESS to the point where questions you are asking do not make any sense at all - and what's ever funnier I heard question like this from the university graduate like THE FUCKING IS WRONG WITH PEOPLE OR IT'S ME WITH SCHIZOPHREMIA.
Use your fucking head or you will walk out with none if you ever will ask so damn stupid question to me again without ever googling yourself and trying to answer shit by yourself.
If you were offended by the thing you just read, and you want to argue I do not give a shit and will not. If you were not, I would invite you to rest of the note.
#What languages you will need?
Speaking up to topic of programming languages, we invented a lot of those - what's important it's the fact that once programming language is invented and one is used at production which has at least one user it cannot be killed at all, we can considered a language dead when there is no software in it. We have different tastes of programming languages I would classify them mostly as object-oriented, function-oriented - however I hope we will eventually close the gap between those two up to 2030 and Rust is one of language that is killing the gap (however it misses OOP-related concepts or syntax sugar for doing OOP in comfortable way). Point I'm trying to make is... different people have different thinking pattern - for me, OOP have sense to be most loved approach by most of software that was built in world because that's how dependencies work in software and functional approaches are useful to be used inside objects to define logic and functionality - no matter of what, you probably will need to have a little lick of a lot of languages for different purposes.
#English Language!!!
Like seriously...
LEARN HOW TO FUCKING READ RETARD
And what I mean by that is...
As people can tell from this document I'm non-native english speaker.
Back then in 00' when I was learning first-steps for programming I was not able to find any reliable resources in my native language (polish) on web, but there were plenty of them in English.
Maybe people now are just copying same content and publishing as theirs in native language (just sold you idea how to be famous btw) but I think there is still a lot of resources that most of people miss and guess what... it's all in english, people who founded web were speaking in english, RFC standards are written in english.
It's the necessary language that you need to know, and foregin languages aren't different from programming languages at all - if you cannot handle such single task I advise you to change your choice to even touch software because you are retarded (so am I who is blaming non-english person in english hoping one would understand).
#Markup Language
You need to understand at least one markup language, people of different times know different generations of markup languages, as a product of Gen-Z I was born to know HTML and Markdown, before that XML was used as deep down Markup Language is just form of a structured text which can be later parsed and serialized. Let's say you want to write a document like post you are actually reading - it's just Markdown mate, it's human-readable, intuitive and eventually timeless. Do not use microsoft word or any other office software, because you can just write it and eventually convert it to office and I can assure you - it's faster to write things in markdown than it is in office when it comes to basic text while getting familar with markdown is matter of a week, also it's used literally everywhere in computer science communities.
My recommendation is to learn basics about markup languages as a concept, lookup markdown syntax and eventually that should give you a little edge even at writiting your own notes. You can also learn about HTML if you are willing to build simple website or something, honestly I have never written production HTML, as once I get into market everybody was just so hyped about React.js that nobody ever wanted to use HTML so eventually I had to learn doing "HTML but in multiple files" which React.js is de-facto.
When we speak about markup languages it's worthly to notice that you may not necesairly met XML
in your carrer speaking for Gen Z, but we can definitely see JSON
, TOML
, YAML
as ones that are often used for configuration of applications or to transfer data from one place to another.
#Shell Language
- You need language that would allow you to build "makeshit" solution for a specific problem or just check idea.
- Languages cannot be "strict", should allow you for stupidity and do not enforce on you good practices.
- Languages should not be necessairly optimized or performant
- Language should be cross-platform
- Language should have garbage collection and it's own runtime
- You will be using such language to just doing shit that you may eventually throw to trash after day that you written it, sometimes you just want to automate some computer work and that's it.
- Personally I found
nushell
extremally interesting for this purpose, as it's a modernized shell which enables functional programming concepts which is just perfect for automating stuff, it also have built-in support for manipulating data like opening sqlite databases, json files and so on. It's "just there" and have most of things that you would need. Besidenushell
,deno
/typescript
andpython
seem to serve similar purpose.
#Scripting Language
- TODO: Not every different from shell
- TODO: Shell have overlap but is different in package management
#Programming Language of Choice (PLoC)
- TODO: Functional/Object-oriented
- TODO: Choose fresh as enthusiast / Choose legacy for cash
#Cashlang/Evergreen Programming Language
What I mean by "evergreen" is a funding and dependence on the language, even through you can release software with any programming languages even one with two members in community where first one is creator who dropped the project and second one is mentally insane, it's not convinient to cut yourself off community at all, writing software from ground up it's a time-consuming process and you need to eventually make use of external libraries or frameworks when time is a matter to deliver a solution to your user or simplify go public with something.
Evergreen languages are often able to offer ecosystem that is "abstracted to the tits" with at least one major framework which defines how programming language is used along community that is potentially available to help your problems or have documented problems in public forum like GitHub Discussions or StackOverflow.
Evergreen languages are not defined by community or crowd, these languages are often defined by enterprises and by enterprises I mean every company that is worth more by 100B USD (excluding Google as Google have shown their incompetence in technology development multiple times, such as Dart or Flutter which eventually will be replaced by Kotlin).
Evergreen languages are the ones that will allow you to work professionally as there are plenty of companies using them and are backed by technology giants who have in their interest for these languages to be evergreen, mostly they aren't much fun to work with - but it's acceptable for things that you get in return.
FUTURE NOTES: Do not blindly follow what enterprises have produced or are using, add a little speculation for yourself and do not fall for fresh technology which tend to be underdeveloped, you do not want to expose your users to buggy or crashing software, technology cannot change from day to day and it requires years to replace one language with another, it took 40 years to initally release potential alternative to C language (Rust) and 15 years to build viable alternative to Java (Kotlin). Do not follow any social media or influencers which do not touched production code since years, do not follow inviduals who are independent of their technology choice, do not follow open-source/github statistics as ones do not reflect real environment outside github on which github do not have insight. Instead you may want to read real insights from McKinsey, Thoughtsworks and Jetbrains which are companies that know what they are talking about most of the time.
My recommendation for this selection of programming languages are c-sharp
, java
, python
and typescript
where python
and typescript
can be considered as overfilled with wannabe developers which do not have clue about actual software, however you still are able to find a job with knowledge of typescript
(at least in Europe, at least in my case) but that's a lot harder than c-sharp
and kotlin
where I personally know a lot of people who always say to me there is lack of developers to maintain projects. You should have knowledge of dot-net
or spring
frameworks, not only latest versions of frameworks but you should also cover yourself with 2-years offset (knowing like... deprecated things or at least have clue of breaking changes that happened over time, had this issue when I started programming with node-10
and happened to work with node-8
software - or rather callback instead async/await). I disadvise typescript
just because ecosystem is too voltile comparing to others, there is too much social buzz that will only confuse newcommer and for sake of sanity just choose thing that was used 2 years ago and be sane instead ever-changing npm libraries that have breaking changes every year which makes you rewrite whole software if you are willing to adopt. Another recommendation of mine could sound following If Jetbrains released IDE for your language, it's a evergreen language.
DISCLAIMER: I'm individual developer, I have choice of tech to work with at my projects or most of the projects in which I was participating behind my full-time job. My recommendation should be taken with a grain of salt, as I might be wrong - perform additional research yourself. Speaking for myself, I picked TypeScript way before this even become a thing in my country which made finding job nearly impossible and I would not advise of doing such to anybody as this was dumb (yet necessary as I was growing and learning without any senior or authority to follow). It's also important to make yourself comfortable with programming language you choose, for example with c-sharp
and java
there is syntax difference that for me as person who have grown with java
make c-sharp
frustrating to use, so I personally stick with java-like
languages.
PS: Languages like c
, cpp
, go
, rust
, php
, ruby
where not mentioned purposefully because market for these languages is very specific, for place where I live if I would like to have job in one of these around me I would actually starve and do not cover my bills, so these "super tweeter advises" will make you that way - avoid it at all cost, choose wisely according to your situation and once you are off risk of starving you can do basically whatever you want. As final words I want to say java
and jvm
was with us for a long time and it's not that bad to deal with, especially with potential replacement by kotlin
which I would call sugarbomb for java projects becasue you can have really a lot of fun with language and as language is compatible with jvm
you get huge ecosystem of good stable libs with which you can build web, desktop and mobile applications - pretty much everything like you can see in typescript
which in 2024 I would say needs to mature and decide where it's going for some time - ecosystem got too much fuzzy since 2020 and even for me who was doing it professionally for more than four years I do not know what the fuck is going on.