I am not self-taught. I went to school to obtain a B.S. in Computer Science. I’ve been in the industry for one year. This is not to say that having...
For further actions, you may consider blocking this person and/or reporting abuse
I am partial towards Java. Yes it feels like lot of boilerplate code and restrictive format. Everything needs to be within class. There are rules on what can inherit and what can encapsulate. But in the end, you develop a strong sense of how to architect your code. Something that python or c++ like multi-paradigm languages can't enforce within you as you would always take the path of least resistance and only try to structure code for sake of reducing repetition.
The main point is that you should be able to structure code even before you begin typing it. Structuring after you have written code is bad productivity
And once you master one programming language, other languages are just different syntax. I have coded in PHP, JS, Kotlin, Swift, TS, Java and C# and Only issue I ever had to deal with was when legacy code was badly structure. My peers can understand how my code works because of the structure. Even in kotlin which provides a lot of flexibilities over java.
pros and cons about your point, I agree that
I don't about
You develop a strong sense of how to use OOP, for years I was trapped in that limited frame, is not easy to see beyond that once you get inside that box, OOP is not the best for everything, has it's merits and its problems, not every project will benefit from it, to limit oneself to one paradigm is not what I would suggest to a new user. That is exactly why I wouldn't suggest Java and to chose a multi-paradigm PL instead, to try to solve a problem with OOP and then re-implement and re-design in functional or other paradigm to understand the differences, pros and cons is a much better exercise to me, than just marry OOP and memorize whole Java boilerplate. You may even become a Haskell weirdo or a Lisp master.
Yes you are right, I should have been more clear about it. And I can share your feeling about trapped mindset. I worked on ruby on rails years ago and I struggled to adapt the meta-programming mindset. I have straight forward avoided using functional programming even though I love elixir as technology stack. Even today, for kotlin and Java lambda's, I struggle a little. For lambda's, My path of least resistance is to write code as I know, and then let android studio take over to convert my code to lambda.
OOP is not best for everything. But it is a good starting point to learn relationships and flow between code. With my dealing with college freshers, I have felt that those with good oop concepts can adapt to other coding paradigm easily, in contrast to those freshers who didn't. I have to review their code less.
One of the fresher working on a PHP project constantly objected our MVC-like approach citing its unnecessary to separate HTML and PHP logic into different file. ( I am living in a so called non-IT city in India where coaching classes still teach PHP 5.1, and college still uses borland c++ 5 to teach students).
I think mileage varies from person to person. Java has a benefit (or curse) of strict coding styles which means when teaching it to students, It's less distracting, because even though you can use your own coding style, community expects you to adapt default guideline. In the end, you have one less thing to worry about.
And like I said, Once you gain some work experience, working on any other language is just adapting its syntax and limitations. I switched my career from Java Servlets to PHP 7 years ago, and last year I switched it to Java and kotlin for android development. The difference between strict type and loose type language was nothing which google can't solve ;)
give functional a try, I started to dig into it when I started with Rust without even noticed; after a while I realized that my code naturally started to get more functional and that was just trying to make it more clear to me; the realization was almost freaky to me. Specially because since the university I always leaned to OOP, first with C++ and then with Python.
Thank you both for your insight!
Great article 👍
Only thing I'd add is that when we say “Programming languages are really the same language but with different accents” (I've been known to say things to the same effect), this only applies to imperative/procedural languages which are influenced heavily by C.
Functional languages like Haskell and Clojure look and are very different. Historically it wouldn't have been worth mentioning because Object-Oriented was the accepted paradigm, but since more and more languages are incorporating things like lambda expressions, I'd say it's worth a beginner knowing the origins of that sort of syntax.
Thanks! The article is a bit telling of my own depth of knowledge. I've dealt with OOP languages for the most part, but this backstory seems worth looking into.
We all have our strong and weak points! And it wasn't meant as a jab at your knowledge. Really useful article 🙂
I'm helping my spouse learn Python, so +1 on that for me. Her experience really opened my eyes to how hard it is to learn and teach technology.
The english-like syntax is the biggest thing that helps both of us every day. The other two bit things are (1) the tools are really good. We're using VS Code which has a great Python plugin. (2) She's building a web app and the Python support for all the APIs she needs is pretty good. It's generally a "first class" language for the major services like Stripe, Auth0, and so on.
+2 for converting another one over to the coding side. I would love to hear about how the experience is going. What was the biggest hurdle for teaching it?
Thanks 😊. Overall I'm really enjoying it these days. I think she is enjoying learning, but even after ~10 months there are still a lot of concepts and jargon that are completely foreign. I didn't realize how much of software engineering relies on acronyms!
The first memory I had of teaching her was explaining how the terminal is just another UI into the computer's underlying functionality (compared to GUIs and voice commands). But to do that, I had to explain what was under the hood in a computer. And down that rabbit hole we went!
These days, she has an app on Google App Engine (leksi.co if you're interested). It's a flask app with a Vue JS frontend. Architecturally, it's using a bunch of different APIs, using background queues & workers, and even has to do some complicated database operations and distributed coordination (she's generating a bunch of MP3s in separate processes and then combining them all together in the final step).
The easier part for me is explaining the architecture design, but when it comes time to translate that to code, it gets really hard. Kinda reminds me of when you can understand a spoken language, but it's crazy hard to actually speak to someone.
You gave me an idea to write about my experience teaching (with her permission).
I don't think that Python is a good starting point. Maybe I do not know too much about it, but my experiences are that Pythons module system is crapy. I often had to fix those "Module not found" errors. This may of course be a result of less knowledge but this can be a stopper for beginners I think and frustrates beginners.
I am not sure if you explicitly omitted Udemy in the link area, but they have very good content, too. You just have to wait until they sell everything für 10-12$ which occurs at least at 300 of 365 days in the year xD
I'm just getting into Python at the moment (I come from JavaScript land) and yeah you're right the module system is awful. But at a first glance I'd say it looks like a good language for beginners in spite of that. It has all the features a beginner needs to learn about but is more forgiving than a language like Java.
The number one tip - REPS, REPS, REPS, REPS.
You'll find people saying that you only need to spend a few hours a day, and you'll pick up things in no time. I disagree to the max. If you have a job then totally I do understand the time commitment, but in order to learn something you have to put in the work every day. (damn I sound like a workout commercial or something). But it's true.
The more reps, the more you retain, the bigger the learning gains. I don't think it matters where you start, especially if your mind is a blank slate and has no programming knowledge. Yes, some places are better than others to learn but you just gotta step up and get going.
Reps can include anything from viewing other peoples code, writing your own code, taking tutorials, building projects. The number one way I initially learnt web development was downloading templates of HTML online and viewing how people used code to build a web page. And changing small things to see what they did. The more I did this, the better I became at building my own webpages. It would be the same in programming - downloading code and seeing things like how did they setup functions, how did they reverse that array etc etc.
I agree. Practice is a huge! Also, something that you implicitly mentioned: exploring the code. I learn the same way. Kudos to you for that!
Great read. I got my first technical job this year. If I may add codewars to the list too, I enjoy solving the problems and increasing the difficulty with the site. Plus you build up a score too.
Congratulations on the new position! I have not heard of codewars, but I'll check it out.