Lmao right. I’m trying to escape Java here LOL. It was my previous job and my current one. Looking for a new place now and all the recruiters are coming to me with more Java jobs haha fml
I didn't "get" unit testing. Because it felt like I was testing for things that were obvious. And then I realised that 1. That's still very valuable. Especially on bigger projects 2. It helps you realise when your code is linked badly when you can't unit test 3. It's helps when refactoring or changing business rules to know initial intentions Also dopamine, 100% test success is always a nice dopamine boost.
"Stop using bash once you get to arrays." That explains how we ended up with a 70K line bash system at a previous job. The system was older than bash arrays.
Java today is actually good and has a worse rep than it deserves (probably old coders remembering the dark days, just like PHP). All its missing now is reified generics/C# templates and it would be golden. The ecosystem puts almost any other language into the dumpster (maybe not js/ts in terms of volume but personally I feel the quality is way worse).
Yeah, I feel like he is half joking, half blocking out some Groovy Java trauma. Java still has its quirks, but it's a great language and has a solid foothold in the industry, even if it doesn't mix much with the frontend/functional crowd. I've personally really gotten an appreciation for Groovy, I wish you could write Java like that and have the same native run times.
@@theshermantanker7043 It's a huge refactor of the entire VM + you have to keep backcompat (including with proprietary class files). I hope they do it this decade lol.
excel has terrible plotting capabilities. 20 f*ing years! and until recently they didn't have capability to create new functions but they have a giant 3d letters feature, so it's fine... just like ms word has almost no bibliography management, terrible picture placement tools, sh*t paragraph styling system, but has a giant 3d letters effect.
@@Daniel_Zhu_a6fMust be sad when you don’t know how to work an application but blame the application for being on the right hand side of the bell curve.
@@o0Donuts0o the fact that i've consistently found that writing a python script is a faster and simpler solution than using an application that allegedly simplifies data manipulation, should tell you a lot about that application. if word had fine citation capabilities i we wouldn't have to use zotero/mendelei/endnote. and if word had normal formatting tools (good chapter numbering, picture embedding etc), latex would have probably gone extinct.
Java is actually my favorite language because to me it's the easiest to read. I really don't like how a lot of newer languages try their best to have as few of characters as possible. People always give me crap about it takes to long to write but I just use an IDE and it types most of that for me now what I do do a lot is reading other peoples code.
Especially with AI autocomplete now. It takes more characters is not a valid argument. And yes I agree Java is the most readable language. I can scan a piece of Java code in 3 seconds and know what it does. Lower or higher level languages, all of them are more difficult to parse.
"If statements are UNREADABLE SPAGHETTI!", cry the clean coders, who use 23 different files spanning 5 layers of abstraction for the same functionality as a 6-line If statement.
It depends bro, for instance let’s say I wanted to determine an angle to turn something along a radius and I had sensors around the object to determine let’s say light intensity… why would I use if statements to step into the direction in a limited and bloated way when I can make a function to normalize and determine a vector based on the optimal direction derived by the light gradient cast upon all sensors… it’s kind of like looping over data one by one instead of using a hash map…
I hate their irrational hatred towards gotos as well. I think they're just autistic if they can't read code like a book. Procedural code is literally step by step description of what we want to achieve, you can't get closer to pseudocode than procedural.
@@tongpoo8985 it caught up to many features C# introduced after it surpassed Java like switch expressions, type based pattern matching with instanceof, record classes, var and local final variables (something C# actually is missing still, still no local readonly), ok-ish lambdas, etc. Java still never made the "breaking" change of adding reified generics which is why I am still a tolerator and not an enjoyer.
Java is a really supreme language. Once they can figure out how to decrease start up times using Spring Boot, its going to be a huge game changer. Otherwise Java 21 already includes a lot of impressive features that reduce verbosity, improve virtual threads as well as functional programming.
@@gruntaxeman3740 Interesting!! how large is the application you’re working on and how mature is the Quarkus framework? Spring Boot still seems to have the edge in terms of features. Maybe that has changed or is in the process of changing?
@@rsKayiira I'm not using it in current projects but I really want to use it more. In past I did one small project and it was pleasure to use, and there is tons of features. All bells and whistles are found from extensions. I found it mature as it is based on open source libraries that implements Java standards but it also has Vert.x and GraalVM. Most of the backend code I wrote currently is for NestJS for various reasons but if I don't have any reason to use some other framework, I'm sure I would pick Quarkus. Tooling, features and performance are so good and philosophy it has is to follow standards. I know Spring and used that too but it kind of have "homemade" feeling around it. Spring boot was my Java stack before Quarkus appeared.
First minute I’m like, I use the back of my power drill to hammer in wall anchors. Not because it’s best, but because the hammer is downstairs and I’m not.
Scala was the one language that gave me feeling of - when it runs it runs correctly. No other language not even Java which was my go-to language for more than decade. BTW - Java has changed a lot and still evolving at rate faster than new and old languages. It has all new concurrency primitives (green threads, actors etc), functional aspects (f as first class citizen, match statement case classes etc). So article's main point - Use Java for everything is still valid and in fact good practical suggestion. Today, we have more options for many different use-cases (go, rust, zig etc) but Java being go-to language still holds true. Many design choices Java had (and having when implementing new features) - hold still true and its the only true scalable language - large programs (LOC), performance/scalability covered (multi-core era), backward compatibility.. take any programming metric Java would fare decent if not in top 5. Often cited verbosity as bad feature hardly matters because of decade old matured IDES (which BTW dynamic languages can never get to sophistication level of Java). Java is so good that it has its own eco-system of child languages that run on JVM. Javascript was part of Java from JDK 1.5 (2006ish - Rhino). Graal Project from Oracle has not offered way to run multiple languages in the same runtime concurrently. My own take - Choice of Javascript as VM inside browser was wrong one. It should have been Java. (Java had applets going for it). This would have made Java truely English language of the programming and would have saved lot burn to man many programmers.
This reminds me of when I was starting out in martial arts. Everyone was saying that their Kung Fu or Art was the best, but I realized that it wasn't the art that kicked ass. It was the artist. If you got good with a particular skill, guess what? You were good at using that particular skill to do just about anything, because you'd already learned the corner cases and work arounds and how to shore up its' weaknesses.
I started my programming journey in 2007 with de-obfuscated RuneScape clients and writing a custom server , which was all Java back then. It'll always have a special place in my heart. ❤️
Same, but I hated Java. I liked that the community platform which is still kind of around was all wrapped in Pascal and interfaced with Pascalscript. Dealing with sniffing all the glue was ironically less of a headache than the convoluted build system of just java, so I liked working on that side of things. I never released scripts only libraries because I myself was only botting because I liked the programming. I spent way more time writing code and debugging than ever botting lol
@@22ROM Java is still pretty widely used by many companies. Particularly as the native language of Android and Oracle software. If you want to work for Google on Android or another company that mainly uses Java, or if you are very interested in projects using Java, then yeah absolutely. It depends on your goals and what you want to do. If you are new to programming entirely I would say start with something like LUA or Python, whatever ecosphere interests you, LUA is big in game modding and application scripting(like nvim), Python has a package for everything and you can quickly make useful tools and programs for anything you can think of. Unreal engine uses C++ for game scripting. Unity uses C# for game scripting. Google uses C/C++, Java, Go, Python. Meta/Facebook uses react, c++. Java, python. Amazon uses typescript, c/c++, python And so on.
I'd love to know more about Prime's decisions of when to use "the right language for the job". Because in almost all of enterprise and corporate development I've been involved in (from the very, very small to the very large), a language is picked and then that's what we use for a product/application. Unless you do a micro service, which is either never going to happen, or your name will very soon be "mud" because you just cost everyone a shit load of extra maintenance effort.
Funny, I have the exact opposite reaction. Whenever I have to write C#, I want to blow my own head off. Bad libraries, bad documentation, lots of "magic" features that are hard to track / debug, only so-so portability, constant API replacements, often objectively worse "upgrades" to APIs, etc, etc, etc. Java may lack the big breasted bimbo sex appeal of C#'s innumerable "cool" features, but it's full of mature smarts that make it way more attractive to me. 😉
"Class has been compiled by a more recent version of the Java Environment (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0." - #yeahright ;)
The solutions today are endless if you just personally dislike physical contact with your keyboard. You could create (or some dozens already have) an autohotkey script using word detection to write your favorite Python function into Java's verbosity. It would take some time to dream up all the shortcuts you might need, of course. There is of course now AI to contend with. Python etc. might be faster to type, but AI can do your boilerplate. It can probably even interpret the Python code you just typed into a Java IDE (haven't tried this). If you're super scared of AI privacy, use the AI to write your AHK word detection or w/e instead.
And lo, Prime did speake unto his lowly flock thus: "No one will ever contribute". And the people did hear the words he spoke. And the people did murmur in agreement, for they saw that it was true.
Java isn't terrible as a language. The problem is that everyone is so bored with it that they can't just write plain Java, they have to get clever with functional or async, make custom wrappers for dependencies or even reinvent basic stuff like ORMs and web frameworks. It's so bad that every single Java client I've had their coding style has been so radically different that practically no skills transfer from one to the other. This can even be said for much of the standard library which has to pander to three decades of programming tastes and whims.
It's not a horrible language, it's a HORRIBLE runtime. Write code today, next year when you try to run it again on the "current" JRE it won't run. Utter trash. Esp when compared with Go where you can compile code from a decade ago on the current version and it runs perfectly.
@@ZacCrawforth what are you even talking about, the JVM is the peak of forwards compatibility, the only place where this breaks is when you include ASM magic but rarely if ever you'd have to deal with this
I did contribute in an internal library, and yes I was the only one in that company to contribute on top of the initial developer. It returns it got me a job of being the guy in charge of developing this library. Ultimately thanks to this position I got hunted for a major. It was actually a central and very useful library for our daily lives and it's a shame absolutely no one cared about learning how to use it.
Something missing from the video is that languages that claim to let you "Get started quickly" or do "Rapid Application Development" tend towards being harder to maintain in the long run. This has been true since the days when WYSIWYG was new and people talked about language generations. They really do let you go fast at first, but then they become a weight that you have to carry with you everywhere.
Python requires more careful planning in the long-run, but it doesn't mean it can't do the job. You can build 2D games, websites, networks, automation blocks, apps with Python. Of course, Python is though destined for small to medium scope.
@@alexale5488 lol no. i worked at a place that had a python dependency chart that was literal spaghetti. After untangling it and implementing single inheritance in the whole dependency structure, you can go enterprise level on python. Just remove all the squiggly lines and make nice straight ones.
regarding the "unit tests" mentioned in the vid, TDD actually boost coding speeed (sounds kinda counter intuative) - you write minimal code just to pass the test, you catch bugs fast (running the test is much faster than deploying and testing it there), allow you to refactor without fear, the tests also show how things are used and what they are expected to do...
> Undocumented Python programs are horrendously difficult to maintain I've recently started to learn a bit of Nix. It's so hard to properly understand something that requires a virtual PhD and has no static typing. It's just hard to rely on conventions.
I've been saying this to people too. Started with Python, then got into Java, then a tiny bit of C and Rust, then using Python again recently. Not having static typing is so crazy to me and hard to track what's going on in any mid sized to large application. I try to treat Python like a much nicer bash when bash doesn't cut it and treat it mostly just for scripting and easy things like jobs/pipelines.
@@AntonioDoesMetal You can just type check stuff manually. Anyway, this is why typescript is now a thing, and typing is being introduced into python. Eventually, every language turns into Java. You may not like it, but this is what peak programming looks like.
0:48 The language you ... rather your team is most familiar with is often the right language for the job as that is a massive factor in deciding the language. Especially if there are not enough detriments to using it. For personal projects I will just use the stack and language that best fits the task at hand. If that means learning a new language that is what I will do. In the context of running a business and working with other developers having everything written in different languages just for the sake of doing it in the "perfect language" is rarely something where the benefits outweigh the detriments.
This was my take for Python / Airflow. I could learn it in a month after having not touched python for a decade. In 6 months I was proficient. Onboarding the rest of my team took ~6 weeks. Migrating ~150 ETL jobs from Talend (java based gui etl tool) made everything easier to read and more transparent.
Huh? I had no idea these things existed. Now I want to learn Scala, if I'm not going to have to use JVM! From what I've seen, Scala's type system will be right up my alley.
@@nandoflorestan that’s funny. I think some complexities come from frameworks and ways of expressing your ideas like FP. In the end it makes you a better programmer in other languages cause you are exposed to so many ideas.
@@СергейМакеев-ж2н it isn't really used. Like, period. Scala had its moment few years ago but then most people realized it is complex for no reason, and finding an affordable and qualified Scala team is a problem. Its uses tend to be very rare or very niche nowadays
I really can't understand how you, or actually Prime, missed the entire point of the article. The article is about NOT looking for "the right tool for the job".
Have picked Java instead of Python for performance but you are annoyed with java verbose type declarations? Just use Kotlin - best of both worlds - very nice, expressive, concise syntax with Strong Typing and performance from Java(bonus if you are already know Java you will learn Kotlin in hours, 100% compatibility with Java).
I wish we had a language that was Kotlin but with Groovy syntax. Certain ways Kotlin defines things just doesn't mesh well with my thinking, especially since it's such a departure from Java's syntax, such as using "fun" for declaring functions and methods. Why not just do like Groovy and just define them with parantheses after a method name?
I’m realizing something more and more: When people complain about languages, they are most often complaining about how most people use the language and not the language itself.
Why dont browsers use Lua. Seriously that language is just used in everything. I think torch used to be a lua library until python fags got mad and ported it over to python. I would much rather use lua over python. I started off with Lua cus of roblox so i might be biased, but the sheer simplicity of that language makes it nice.
I started programming when i was 10. I first learned Java, (for Minecraft, obviously) then C++ (for Arduino, obviously) then Python (i fucking hate it so much but i use it because libraries). I know a ton of other languages, but I prefer java for everything. If there's a good library in java, I use it, so I dint die waiting for my code to run before it checks syntax. Im 25.
It’s amazing how we share a common backstory. I also started programming 10 years ago in Java for Minecraft, mods - plugs - etc... Funny enough, also transitioned onto C++ for Arduino (around 7 years ago). At this point, I’m also quite good at swift, python, kotlin, php, javascript (including typescript) and more. Java is my favourite. Python is my goto for scripting. I only use C/C++ when necessary (ie. Arduino/ESP/PIC), and other languages based on the platform I’m building for. I’m 23, currently running a startup.
As a C# developer, even though i am supposed to be anti-Java, i'd prefer using Java over JavaScript anyday if i have yo use a language for everything i build. Its a great language even though it has a too much boilerplate problem.
The correct answer to the language question is "depends on the task. I use C# for game dev, Go for web backends, JS for pure web front ends, Dart and sometimes C# or Go for cross-platform front ends, and Python for building chat pipelines into docs for all those other languages."
1:30 I think you missed out on a C. S. Lewis quotation here.... "The first qualification for judging any piece of workmanship from a corkscrew to a cathedral is to know what it is-what it was intended to do and how it is meant to be used. After that has been discovered the temperance reformer may decide that the corkscrew was made for a bad purpose, and the communist may think the same about the cathedral. But such questions come later. The first thing is to understand the object before you: as long as you think the corkscrew was meant for opening tins or the cathedral for entertaining tourists you can say nothing to the purpose about them." - Preface to Paradise Lost
Java can be written without crazy abstractions as well unless you need to pull in some library that cultivates this caricature approaches you mention. And even then you can encapsulate this into some internal class. But I agree this huge amount of abstraction is really hard to get into and wastes time and obscures things.
this comment gave me vietnam flashbacks. i still love java though.
หลายเดือนก่อน +1
1:03 Well, I get your point and I agree if I'm looking at it through a purely technical perspective, but to be fair the game industry basically transitioned from Scaleforge (Flash) to React/JavaScript, so not much has really changed in that sense. And my guess why they use these technologies is to allow artists/ designers to design and implement menus themselves without needing a developer, which saves dev time. Designers 15/12 years ago typically learned Flash in college and since flash is basically dead outside of the animation realm colleges now teach them HTML/CSS instead so this transition makes sense. So in a way it kind of is the right tool because of the circumstance I mentioned above.
The right tool is C. UI? C Engines? C Subsystems? C 'but you need JS for web'. No, you don't. The web was better without the js idiocy of the last decade.
@@theshermantanker7043 That's not the case at all my friend. Some of the very best and most stable ones are written in C. And what about the most stable and secure operating system kernels, like BSD and Linux? The answer is C and not C++. And there are good reasons for that.
One of the best things i ever did as a developer is pick a "New Language of the Year." I would focus on a specific aspect or paradigm of programming and pick a language to use for random tooling, or as a (bad) solution for many problems that weren't mission critical. I've now got many tools in my toolbox that all have specific features that make them good for a specific task. Need math, i got R. Need purely functional and types i have Haskell. Scripts with quick and dirty UI, tcl/tk. Meta programming, Scheme/Racket. Been a programmer for 20+ years so i have a dozen more.
We have the same problem when we talk about proper domain boundaries, people complain that writing mappers is boring and tedious and it is but it's also very easy to test and maintain that code. And it's your job.
"I just choose the right language for job". I effectively said this for tools in general with my interview with ThePrimeagen but I did caveat it with you need to know the alternatives. If you don't know the alternatives, you can NEVER say it is the best tool for the job because you only have one option. It is by definition the worst choice too because it's the only choice. And when it comes to programming languages, I am one of those weirdos who is a polyglot who knows literally 100s of programming languages because that's kind of what I do for a living. So knowing "the best language" in that case is because I know the alternatives; most people don't.
@@gerciusthat Ginger Bill fella on which comment you've made a remark unironically designs and writes the languages, so he actually can know this amount
@@Mglunafh What kind of depth of knowledge are we talking about, writing "Hello, World!"? I do not see, how is it possible to be proficient with 100s of languages unless you have eidetic memory or similar abilities.
@@gercius you must've misunderstood me. By "Writes the languages" I meant "writes the compilers for languages", not the "writes some programs on languages". At this point I'd assume that for being efficient in this endeavour one should consider diving into various languages on a routine basis and sniff out some intricate details for better understanding of the formal language theory behind the features and technical details implementation-wise. If that's a language barrier, then yeah sorry, I'm not a native speaker
I use Java for 90% of everything. I have builds from Java for J2ME, Android, J2SE (SWT and Swing), native, and HTML5. I even have the ability to do Flash, Applets, and JNLP outputs if they came back. Nearly all of the other 10% is Javascript for simple webpages. Oddly my WSYWIG editor is JSON output from a Javascript tool called GDevelop.
10:46 people who say python is slow are those who fail to do things the pythonatic way. Python is good at string processing but if you compile your regex inside the loop it's your fault.
People write python like they're not thinking about the underlying code at all then complain it's not as fast as C. Yeah it's not, but at least try to leverage the way the language is built over C in very predictable and understandable ways. "Is there a way I can make this go through optimised paths within cpython instead of doing generic manipulation in the context of the interpreter" is the question to ask, and exactly what "pythonic" means in the end.
"REFACTOR LATER". Yes! In almost 25 years in enterprise, I've not met a situation where refactoring later was the wrong choice. And any time an optimisation was made earlier a refactor generally needed to change it. Solve for now.
In the UK on July 5, 1948 the NHS was created. Within a week, there were reports of it being “on its last legs” or “about to go under”. Seventy-six years later it appears to be here still, different to how it started, but still here and still the same headlines about it being about to go under. Feels the same about Java, known even SME’s use spring boot projects for mission critical stuff.
I have been playing with Zig for about 6 months. Other than it changing so damned much it has been real fun. Well maybe it is so much fun because it is so new. I agree with your quick diagram but I do not really find C all that tough (done dev in it). Rust is REALLY hard to get productive in. Go is literally super easy (and probably almost as fun as Python to write). Zig is almost as safe as Rust, almost as fast as C, almost as easy as Go. Just kind of in that magic perfect spot.
Hey, my answer to "What's your favorite language?" was also "There is a language which works best for a specific type of work. But I like Python." Then he said, "So you mean, you have worked with many languages and have a versatile skill set?". To which I replied, "Nah, I do 1 or 2 languages, I don't like doing every type of work. I always have power to choose a work that I should do or not." and I landed a job of a salesman.
I like your argument about the "If else" statements. Most of the time that logic will just run fora fraction of a millisecond. If it is slow we can optimize it later, stacking up the work-hours.
I only say “depends on what I’m doing” because my favorite languages are Python and C. If Python had an alternative to front-end JS frameworks, I would never touch JS again
@@leeroyjenkins0 Serverside rendering is usually a bad idea ... I don't want to pay for the CPU cycles (and the horros of maintaining state and sessions) of displaying stuff at client computers. I want to offload as much work as possible onto clients actually.
@@dominikvonlavante6113 depends what you're doing I guess, probably not ideal (perf-wise, which isn't necessarily only factor) in most cases if you're doing frequent updates no. But if you don't want to use JS there you go. Unless you want to have a python interpreter in JS, which sounds wonderfully awful. But who knows with wasm 🤔
In C/C++, if-else hinders the generation of jump tables since you can evaluate any expression. Switch, on the other hand, forces you to evaluate a single type that is easy to generate a table. This might not be true if the compiler can reason about the if-else statements, but it's a rare case (if the expression is trivial), This might be true for the other languages, but it's true for most of the compiled languages.
@@bionic_batman If you want maximum job security get into Oracle or MS. You will never get out...but you will never have to apply for a new job either. Sounds like hell to me.
8:25 hits different. I'm currently in the same exact situation and I know full well that I'll be the only person ever going to do stuff with that project ahaahaha. God damn I hate how relatable this is
for everyone raging about react, or js embedding into c++ / games etc, you have to understand soemthing: its not JS people want, and its certainly not React specifically, its html+css+js. Its the easiest and simultaneously the most powerful ui toolkit, and that is why so many native developers even are reaching for it... IMO what we need is an embeddable dom rendering engine with bindings for a better language directly like potentially Dart... Imagine writing native components in dart that just worked in the browser, and could be embedded into native applications. That could be done, but the browser manufacturers and w3c don't do it because they are already all in on js.
Many people, me included, are still hoping for WASM to get access to the DOM the same way JS has. This would allow any languge that can compile to WASM to also render on the DOM directly. Right now you can do it in Rust in a roundabout way with automatically binding to JS bindings you can call from WASM, but it's slower and has limitations that makes it wonkier to use.
@@vitalyl1327 yes "Its the easiest and simultaneously the most powerful ui toolkit". The alternatives are full on pixel shaders (too difficult/time consuming for uis) or native ui toolkits (too limited for achieving super custom designs). Am I missing something?
@@nomadtrails there is a whole range of alternatives. From the approach similar to Dear I'm GUI to things like Tk (which is insanely versatile and vastly underrated).
@@vitalyl1327 ImGui pitch literally says it is not designed for UI for end users. For Tk, I just checked out the 'modern' tkdocs website, and took a peek at the button widget, and man... you have to be kidding me. My guess is that you have never programmed a UI with web tech. I would recommend checking out svelte. Then revisit Tk, and tell me which is simultaneously more powerful and more easy.
I know JavaScript, Java, Go and Rust. The one time where performance did matter and I recommended Go because it's very fast and has a small footprint I was told by a Senior we always write Java lets write this also in Spring Boot :)
I love the article because I just came back to Java last year after almost 10 years and I can't agree more. Just write everything in Java, it's just not worth the effort to do it in other languages. If I really need something I can't do good enough in Java, I do it C or hell in ASM even
I feel like java got better lately. java 8 was okay, since 11 and now espeically with stuff that got new in 17 and is expected to be in newer LTS versions, java is kind of decent. other languages are still more fun by themselves. but combining javas improvements lately with the vast ecosystem of usually well proven, production ready libraries in the ecosystem make it a powerful tool.
A few years ago I started to learn programming on my own and chose C as my first language. I love it and are half way through making a game in it. It's a lot of fun
To be honest, I'm a C# dev and I try to use it whenever possible. My time is most valuable and I see little point in wasting it by deliberately choosing a language I'm unfamiliar with. On the other hand, if there are existing libraries in Python, I'm not gonna be an idiot and try to parse Python into C# - even though it's possible. I think you should know 1-2 languages well and use others when you absolutely have to or really makes sense in terms of time effort.
Same, everything I do can be done with C#, outside of web development (no, I'm not gonna use Blazor) so I learned Svelte+Typescript because I don't hate myself enough to use React
Well, I think one would do well to learn different paradigms.. write something semi-substantial in languages like Haskell, Ocaml, Lisp, Prolog.. maybe Erlang/Elixir and Rust. Even if you don't end up writing your stuff in those languages they teach valuable lessons about pros and cons of very different approaches to problems... and you can borrow some ideas from them. Or.. you can just write code and be happy.
For C# devs it makes sense to know a medium bit of C/C++ and PInvoke because then you can use C-Style DLLs. It doesn't have to be fancy C++ because what DLLs expose is data structures with a fixed layout that can be recreated in other languages, so it's structs, it's always structs and pointers to structs.
the main complaints for java were verbosity and startup/runtime overhead both of which are entirely solved with kotlin... want to do something in the relm of low level (like zig/rust) go kotlin native... want to do actually typesafe javascript? -> kotlin with targetting js, want wasm? sure you can do that too, want to do everything? web/native/server and whatever... go kotlin multiplatform... jetbrains will absolutely dominate programming language and tooling world in ~10 years... they are fuckin smart about it, and no one absolutely no one is doing anything to even be remotely competitive.
@@bobderbraumeister6919 it will get solved, i dont like gradle either, but its such a small problem compared to having one language to share code in all platforms i don't really care about that downside... we have to mess with builds so rarely that its irrelevant.
@@bobderbraumeister6919 what about gradle sucks? (Genuine question). I didnt like it at first, but the more I use it, the less I'm bothered by it. So much so, that nowadays I prefer gradle over maven
@@lengors7327 most problems with gradle boil down to them using groovy so you have no completion when working with plugins, you are in js developer mode, copy pasting shit until it works, instead of working with the api of the plugins. Also many issues boil down to "upgrade to newer version or lower version to make it work"... backwards compatability being broken etc... its not consistent
Well, I just love the Java API. When I used it, it literally gave me everything I needed to know about the language and syntax once I learned to read it properly(that took me some time). All other languages require a tutorial.
Java is dated, yes. It has some poor defaults too. But what people forget is that the JVM is a freakin' amazing piece of software, and it doesn't force you in any way to use Java as a language. Use Kotlin, target the JVM, be happy.
The article is still correct. Java is orders of magnitude faster then js/python and that's why it is suitable for a large set of problems that require more performance. Not just because the author is good at it. The same could be said about Go.
I had to build servers for ad tracking. The old php backend was able to handle 30 Mbit/s of incoming traffic per server. cpu on the befiest server we could by from our hoster was at max with php. The new backend rewritten in go and optimised with running profiling in production easily saturated 1 gbit/s with moderate resource utilisation.
Use C#. It can (nowadays) work as scripting language very well (top-level statements), it comes with 90% of the stuff out of the box (and the 9% is in nuget packages), it works on all major platforms, and many minor ones (nowadays), is actively being improved, is "quite fast" by default, and it can be improved to some pretty ridiculous point. And if even that is a problem, you can trivially bind an external dll (on Windows AND Linux and probably mac xD), which can keep your hand-rolled assembler ultra-fast solution. Or use F#, if you swing that way,
Being slow is not primarily b/c of the language choice, the root cause is the different mindset of the developer who chose ruby/php/... over C#/Java/... It is a mindset which prefers speed of development over good engineering. The same way as "enterprise" developers gave a bad reputation to java, but java was never that bad, its just that those "enterprise projects" were so horrible.
I'm reading this comment after making a change to the Ruby system that was terribly slow in one spot. The guy did split the search function into several classes to add abstraction, but in doing so, he created an N+1 problem. Also when rendering the list, each element included a select menu containing around 5,000 items. No wonder it was running like crap. On the other hand there are places in the codebase that would be at least 10x faster if it was written in Go, there is no way around this.
My problem with Java is that in my experience despite all the improvements in recent versions, we're all stuck writing Java 8 (or 11 if you're lucky) at most corp jobs. I bet modern java is nice, but if I wanted to use modern java it'd have to be in my free time, and at that point I'll write rust
2:45 C# has been quite fast ever since they introduced the ability to compile your code directly to binary instead of running it in .NET's CLR. It may not be quite as fast as a some of the insanely optimized JVM's out there but it's plenty fast for the vast majority of applications.
As a kid I watched skate vids to get fired up to go skate, now I watch prime vids to get fired up to go to work
Same. Lol
For reals. I hear him get all pumped and I’m like “LFG!!” 🤘🎸
Are you me?
I was just thinking of this
Yup we’re living the same life
A decade ago being 2014 physically hurts me and I'm not even old
26yo here and I feel ya
23 yo here and i feel ya. Last time i remember 1 decade ago was 2004
I‘m 23 and I feel so old already
nice try grandpa
99% will say they aren’t even old. It sneaks up on you
Prime thinking that Java is not used anymore is the perfect example of these meta commentators being out of touch with the reality
Lmao right. I’m trying to escape Java here LOL. It was my previous job and my current one. Looking for a new place now and all the recruiters are coming to me with more Java jobs haha fml
Yeah, that actually made me do a double take. My gut thinks is the third most common language (c# and JS et. al. is more common)
Probably meant it as a joke. Netflix is basically a Java shop
It's not shocking that it's still used, it's mostly disappointing
I didn't "get" unit testing. Because it felt like I was testing for things that were obvious.
And then I realised that 1. That's still very valuable.
Especially on bigger projects
2. It helps you realise when your code is linked badly when you can't unit test
3. It's helps when refactoring or changing business rules to know initial intentions
Also dopamine, 100% test success is always a nice dopamine boost.
"Stop using bash once you get to arrays." That explains how we ended up with a 70K line bash system at a previous job. The system was older than bash arrays.
I can see how it became a previous job o_o
It's easier to port a shell than porting a shell script.
Java no longer being used today is one of Prime's wildest takes the past few months, lmao.
Java today is actually good and has a worse rep than it deserves (probably old coders remembering the dark days, just like PHP). All its missing now is reified generics/C# templates and it would be golden. The ecosystem puts almost any other language into the dumpster (maybe not js/ts in terms of volume but personally I feel the quality is way worse).
@@Tom-jy3innulls and .Equals() method is also a problem
Yeah, I feel like he is half joking, half blocking out some Groovy Java trauma. Java still has its quirks, but it's a great language and has a solid foothold in the industry, even if it doesn't mix much with the frontend/functional crowd. I've personally really gotten an appreciation for Groovy, I wish you could write Java like that and have the same native run times.
@@Tom-jy3in Reified Generics are coming, it's just taking a long time for god knows why
@@theshermantanker7043 It's a huge refactor of the entire VM + you have to keep backcompat (including with proprietary class files). I hope they do it this decade lol.
For a histogram use the worlds most popular database and programming language: Excel.
Excel is the most successful functional programming language
excel has terrible plotting capabilities. 20 f*ing years! and until recently they didn't have capability to create new functions
but they have a giant 3d letters feature, so it's fine...
just like ms word has almost no bibliography management, terrible picture placement tools, sh*t paragraph styling system, but has a giant 3d letters effect.
@@Daniel_Zhu_a6fword art is more important than functionality!
@@Daniel_Zhu_a6fMust be sad when you don’t know how to work an application but blame the application for being on the right hand side of the bell curve.
@@o0Donuts0o the fact that i've consistently found that writing a python script is a faster and simpler solution than using an application that allegedly simplifies data manipulation, should tell you a lot about that application.
if word had fine citation capabilities i we wouldn't have to use zotero/mendelei/endnote. and if word had normal formatting tools (good chapter numbering, picture embedding etc), latex would have probably gone extinct.
Java is actually my favorite language because to me it's the easiest to read. I really don't like how a lot of newer languages try their best to have as few of characters as possible. People always give me crap about it takes to long to write but I just use an IDE and it types most of that for me now what I do do a lot is reading other peoples code.
Especially with AI autocomplete now. It takes more characters is not a valid argument. And yes I agree Java is the most readable language. I can scan a piece of Java code in 3 seconds and know what it does. Lower or higher level languages, all of them are more difficult to parse.
I don't like reading long lines or variable names
"If statements are UNREADABLE SPAGHETTI!", cry the clean coders, who use 23 different files spanning 5 layers of abstraction for the same functionality as a 6-line If statement.
It depends bro, for instance let’s say I wanted to determine an angle to turn something along a radius and I had sensors around the object to determine let’s say light intensity… why would I use if statements to step into the direction in a limited and bloated way when I can make a function to normalize and determine a vector based on the optimal direction derived by the light gradient cast upon all sensors… it’s kind of like looping over data one by one instead of using a hash map…
@@BlueDippylooping over data is faster and simpler than a hashmap when N is small. You're right, it depends.
@@colemanroberts1102 darn right
@@colemanroberts1102 And running your for loops in reverse is faster in javascript but nobody cares about that optimization either
I hate their irrational hatred towards gotos as well. I think they're just autistic if they can't read code like a book. Procedural code is literally step by step description of what we want to achieve, you can't get closer to pseudocode than procedural.
interview for junior c++ developer:
interviewer: what is your favorite language?
me: cmake
interviewer: ( ͠° ͟ʖ ͡°)
what lead me to rust and ts is my hatred towards (c)make
There are other alternatives nowadays. You can even use Zig's toolchain to compile c/c++ apps
my favourite language is cmen
The interviewer is a fan of autotools and m4/libtool ?
better design stuff from scratch than to import stuff with cmake
As an unapologetic Java enjoyer I'm ready for this video. ⚔️💀
I thought i was the only one that likes java 😂
@@gintoki_sakata__ I used to be a java hater and now that the language has gotten half decent I am a certified java tolerator.
Love the Java and the JVM. But nowadays when in a Java project, I find myself pulling some Kotlin in for the new code. 🫶
@@EpicNickshow did they change it? Last time I used it was in like 2015 and I wanted to jump out the window
@@tongpoo8985 it caught up to many features C# introduced after it surpassed Java like switch expressions, type based pattern matching with instanceof, record classes, var and local final variables (something C# actually is missing still, still no local readonly), ok-ish lambdas, etc.
Java still never made the "breaking" change of adding reified generics which is why I am still a tolerator and not an enjoyer.
Java is a really supreme language. Once they can figure out how to decrease start up times using Spring Boot, its going to be a huge game changer. Otherwise Java 21 already includes a lot of impressive features that reduce verbosity, improve virtual threads as well as functional programming.
I use Java only in Quarkus framework. It has excellent startup times when compiled using GraalVM.
@@gruntaxeman3740 Interesting!! how large is the application you’re working on and how mature is the Quarkus framework? Spring Boot still seems to have the edge in terms of features. Maybe that has changed or is in the process of changing?
There are a few options.
AoT compile, or AppCDS are probably the best ones.
@@rsKayiira
I'm not using it in current projects but I really want to use it more. In past I did one small project and it was pleasure to use, and there is tons of features. All bells and whistles are found from extensions. I found it mature as it is based on open source libraries that implements Java standards but it also has Vert.x and GraalVM.
Most of the backend code I wrote currently is for NestJS for various reasons but if I don't have any reason to use some other framework, I'm sure I would pick Quarkus. Tooling, features and performance are so good and philosophy it has is to follow standards.
I know Spring and used that too but it kind of have "homemade" feeling around it. Spring boot was my Java stack before Quarkus appeared.
@@gruntaxeman3740 you can run spring on graal vm
First minute I’m like, I use the back of my power drill to hammer in wall anchors. Not because it’s best, but because the hammer is downstairs and I’m not.
yo im stealing this analogy
Real
Scala was the one language that gave me feeling of - when it runs it runs correctly. No other language not even Java which was my go-to language for more than decade. BTW - Java has changed a lot and still evolving at rate faster than new and old languages. It has all new concurrency primitives (green threads, actors etc), functional aspects (f as first class citizen, match statement case classes etc). So article's main point - Use Java for everything is still valid and in fact good practical suggestion. Today, we have more options for many different use-cases (go, rust, zig etc) but Java being go-to language still holds true. Many design choices Java had (and having when implementing new features) - hold still true and its the only true scalable language - large programs (LOC), performance/scalability covered (multi-core era), backward compatibility.. take any programming metric Java would fare decent if not in top 5. Often cited verbosity as bad feature hardly matters because of decade old matured IDES (which BTW dynamic languages can never get to sophistication level of Java).
Java is so good that it has its own eco-system of child languages that run on JVM. Javascript was part of Java from JDK 1.5 (2006ish - Rhino). Graal Project from Oracle has not offered way to run multiple languages in the same runtime concurrently.
My own take - Choice of Javascript as VM inside browser was wrong one. It should have been Java. (Java had applets going for it). This would have made Java truely English language of the programming and would have saved lot burn to man many programmers.
True that. It was also advertised as such by Oderski. It’s a shame it didn’t get widespread adoption
It should've been Java, it should've been Java all along...
This reminds me of when I was starting out in martial arts. Everyone was saying that their Kung Fu or Art was the best, but I realized that it wasn't the art that kicked ass. It was the artist. If you got good with a particular skill, guess what? You were good at using that particular skill to do just about anything, because you'd already learned the corner cases and work arounds and how to shore up its' weaknesses.
So, java sucks
Me, an enterprise software person: you guys *don't* use Java?
Java 6 is the most enterprise version. You’re not fully enterprise if you’re using a newer version.
@@almostprofessionalrecords6651 true and real
@@almostprofessionalrecords6651Java 21 or bust
We're on Java 8 😆
We have mostly 8 and newer stuff in 11. The biggest issue for me is that about half of the 8 is actually groovy/grails and I do not like it.
I started my programming journey in 2007 with de-obfuscated RuneScape clients and writing a custom server , which was all Java back then. It'll always have a special place in my heart. ❤️
Saaame! The first language I picked up was Java just because I wanted to build a RSPS for fun. That was around 2010. What great times ❤️
I miss Java for Android apps
Same, but I hated Java. I liked that the community platform which is still kind of around was all wrapped in Pascal and interfaced with Pascalscript. Dealing with sniffing all the glue was ironically less of a headache than the convoluted build system of just java, so I liked working on that side of things. I never released scripts only libraries because I myself was only botting because I liked the programming. I spent way more time writing code and debugging than ever botting lol
do you think java is still worth learning?
@@22ROM Java is still pretty widely used by many companies. Particularly as the native language of Android and Oracle software.
If you want to work for Google on Android or another company that mainly uses Java, or if you are very interested in projects using Java, then yeah absolutely.
It depends on your goals and what you want to do. If you are new to programming entirely I would say start with something like LUA or Python, whatever ecosphere interests you, LUA is big in game modding and application scripting(like nvim), Python has a package for everything and you can quickly make useful tools and programs for anything you can think of.
Unreal engine uses C++ for game scripting.
Unity uses C# for game scripting.
Google uses C/C++, Java, Go, Python.
Meta/Facebook uses react, c++. Java, python.
Amazon uses typescript, c/c++, python
And so on.
I'd love to know more about Prime's decisions of when to use "the right language for the job". Because in almost all of enterprise and corporate development I've been involved in (from the very, very small to the very large), a language is picked and then that's what we use for a product/application. Unless you do a micro service, which is either never going to happen, or your name will very soon be "mud" because you just cost everyone a shit load of extra maintenance effort.
Most places Ive worked at had at least 2 or 3 preferred languages
Now it's use React for everything.
The "library" that forces its way into the entire program, changing how you write the language.
Bruh
@@TJackson736 *framework
We use flutter❤❤❤
So basically instead of Java... JavaScript?
Java is alright... I massively prefer C# over it, but Java gets stuff done you know, can do a lot of things well and be pretty efficient.
Funny, I have the exact opposite reaction. Whenever I have to write C#, I want to blow my own head off. Bad libraries, bad documentation, lots of "magic" features that are hard to track / debug, only so-so portability, constant API replacements, often objectively worse "upgrades" to APIs, etc, etc, etc.
Java may lack the big breasted bimbo sex appeal of C#'s innumerable "cool" features, but it's full of mature smarts that make it way more attractive to me. 😉
@@thewiirocks using "big breasted bimbo sex appeal" to describe a language is crazy and I love it
@@thewiirocks So Java is a milf?
Java is a lot better than c# because everything works.
"Class has been compiled by a more recent version of the Java Environment (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0." - #yeahright ;)
Java, especially with Spring ist still massively in use. Also Java-classes can be replaced with Kotlin.
The solutions today are endless if you just personally dislike physical contact with your keyboard. You could create (or some dozens already have) an autohotkey script using word detection to write your favorite Python function into Java's verbosity. It would take some time to dream up all the shortcuts you might need, of course. There is of course now AI to contend with. Python etc. might be faster to type, but AI can do your boilerplate. It can probably even interpret the Python code you just typed into a Java IDE (haven't tried this). If you're super scared of AI privacy, use the AI to write your AHK word detection or w/e instead.
And lo, Prime did speake unto his lowly flock thus: "No one will ever contribute". And the people did hear the words he spoke. And the people did murmur in agreement, for they saw that it was true.
This is the word of the code.
‘ Praise be to code ‘
All power to the engines. Make it so.
Lowkey Java has had a renaissance. Past Java 11 or so, it's actually gotten pretty nice. It's still verbose, but that's not the worst thing :shrug:
Its a good thing.
It's the worst thing.
2024 And I use Java for everything, let's goooooooo
Java isn't terrible as a language. The problem is that everyone is so bored with it that they can't just write plain Java, they have to get clever with functional or async, make custom wrappers for dependencies or even reinvent basic stuff like ORMs and web frameworks. It's so bad that every single Java client I've had their coding style has been so radically different that practically no skills transfer from one to the other. This can even be said for much of the standard library which has to pander to three decades of programming tastes and whims.
stream().sorted().filter().distinct.findFirst()
functional😂😂
It's not a horrible language, it's a HORRIBLE runtime. Write code today, next year when you try to run it again on the "current" JRE it won't run. Utter trash. Esp when compared with Go where you can compile code from a decade ago on the current version and it runs perfectly.
@@ZacCrawforth what are you even talking about, the JVM is the peak of forwards compatibility, the only place where this breaks is when you include ASM magic but rarely if ever you'd have to deal with this
@@ZacCrawforth still better than languages like python where every minor version has a breaking change
@@ZacCrawforthbackward compatibility is one of the main reasons java is used widely.
I did contribute in an internal library, and yes I was the only one in that company to contribute on top of the initial developer. It returns it got me a job of being the guy in charge of developing this library. Ultimately thanks to this position I got hunted for a major.
It was actually a central and very useful library for our daily lives and it's a shame absolutely no one cared about learning how to use it.
3 Billion Devices Run Java
3 bilions gbs of ram wasted :D
@@ooijaz6063 I can tell you from experience that you are underestimating the wasted ram by a factor of ten at least..
Could 3 billion devices be wrong?
How many of these are DVD players?
And three quarters of them are in landfill
Something missing from the video is that languages that claim to let you "Get started quickly" or do "Rapid Application Development" tend towards being harder to maintain in the long run. This has been true since the days when WYSIWYG was new and people talked about language generations. They really do let you go fast at first, but then they become a weight that you have to carry with you everywhere.
💯
Python requires more careful planning in the long-run, but it doesn't mean it can't do the job.
You can build 2D games, websites, networks, automation blocks, apps with Python.
Of course, Python is though destined for small to medium scope.
There's an exception to this when that "quick start" is essentially a generator of the basic idiomatic project structure
@@alexale5488 lol no. i worked at a place that had a python dependency chart that was literal spaghetti. After untangling it and implementing single inheritance in the whole dependency structure, you can go enterprise level on python. Just remove all the squiggly lines and make nice straight ones.
Screw the right tool for the job. I use R for everything
You Rascal.
Unfathomably based.
Gimme a sec, need to swallow my breakfast again.
I have never before felt this incomparable disgusted by 1 line of comment. plz stop
What an absolute menace.
regarding the "unit tests" mentioned in the vid, TDD actually boost coding speeed (sounds kinda counter intuative) - you write minimal code just to pass the test, you catch bugs fast (running the test is much faster than deploying and testing it there), allow you to refactor without fear, the tests also show how things are used and what they are expected to do...
1:13 there are some video games that use Flash (Yes, that Flash) for in-game UI. For example, Fallout 4 and Borderlands series.
Dude, that's crazy! I thought you meant like older video games.
@@KvapuJanjalia now, that is really scary.
SMITE also uses flash.
> Undocumented Python programs are horrendously difficult to maintain
I've recently started to learn a bit of Nix. It's so hard to properly understand something that requires a virtual PhD and has no static typing. It's just hard to rely on conventions.
I've been saying this to people too. Started with Python, then got into Java, then a tiny bit of C and Rust, then using Python again recently. Not having static typing is so crazy to me and hard to track what's going on in any mid sized to large application. I try to treat Python like a much nicer bash when bash doesn't cut it and treat it mostly just for scripting and easy things like jobs/pipelines.
@@AntonioDoesMetal You can just type check stuff manually. Anyway, this is why typescript is now a thing, and typing is being introduced into python. Eventually, every language turns into Java. You may not like it, but this is what peak programming looks like.
@@AntonioDoesMetal You can use type hints. Most big projects do that and follow PEP. Style Guide
Hi Mr. Parmesan
Thanks for the video, good as always
Has it really been that Java devs are the real full-stack devs all along?
Java has always been strong in the backend. In my current project we even do the frontend in Java using Vaadin. 😆
Sip some Java and it goes straight to the backend
@@EdmondDantèsDE Sweet lord, do people still use Vaadin? oO
Define "real"
@@PhilipAlexanderHassialis It is such an emotional roller-coaster that we will never get rid of it
0:48 The language you ... rather your team is most familiar with is often the right language for the job as that is a massive factor in deciding the language. Especially if there are not enough detriments to using it.
For personal projects I will just use the stack and language that best fits the task at hand. If that means learning a new language that is what I will do. In the context of running a business and working with other developers having everything written in different languages just for the sake of doing it in the "perfect language" is rarely something where the benefits outweigh the detriments.
6:33 But python isn't statically typed ... it is strongly typed ... right im out on this one.
@@sacredgeometry maybe he means mypy
@@TJackson736 Maybe.
This was my take for Python / Airflow. I could learn it in a month after having not touched python for a decade. In 6 months I was proficient. Onboarding the rest of my team took ~6 weeks. Migrating ~150 ETL jobs from Talend (java based gui etl tool) made everything easier to read and more transparent.
@@KeeganDoomFire11 I am skeptical that that had anything to do with python and I would argue its just an argument for refactoring.
Scala was a prime example of a language being used for everything: Scala - JVM, Scalanative like C++ and ScalaJS.
Huh? I had no idea these things existed. Now I want to learn Scala, if I'm not going to have to use JVM!
From what I've seen, Scala's type system will be right up my alley.
Funny, Kotlin also has the exact same 3 backends as well
Scala seems awesome until you realize, hey, I have been learning the language for a year and still haven't finished. The LANGUAGE.
@@nandoflorestan that’s funny. I think some complexities come from frameworks and ways of expressing your ideas like FP. In the end it makes you a better programmer in other languages cause you are exposed to so many ideas.
@@СергейМакеев-ж2н it isn't really used. Like, period. Scala had its moment few years ago but then most people realized it is complex for no reason, and finding an affordable and qualified Scala team is a problem. Its uses tend to be very rare or very niche nowadays
"Just pick the right tool for the job" mercilessly mocked in the beginning, and unironically espoused a third of the way in. Masterful.
JustPickTheRightToolForTheJob-agen
@@ty.davis3HammerANailWithAShoe-agen
I think in the beginning he moreso mocked what choices people actually made when they wanted the "right choice"
I really can't understand how you, or actually Prime, missed the entire point of the article. The article is about NOT looking for "the right tool for the job".
I doubt Rollercoaster Tycoon had unit tests.
How do you know?
@@krux02iykyk
Man, I miss those early day tycoon games. Also early day maxis stuff. SimCity/SimAnt/SimFarm.
My childhood right there... Along with Stars!
Java is too intense for me.
I've been in the pipeline queue for ages.
I'm hungry
Chris Sawyer is a legend.
Have picked Java instead of Python for performance but you are annoyed with java verbose type declarations? Just use Kotlin - best of both worlds - very nice, expressive, concise syntax with Strong Typing and performance from Java(bonus if you are already know Java you will learn Kotlin in hours, 100% compatibility with Java).
I’m not a dev but my little bro that works for big corpo says they are starting new things in Kotlin now.
I wish we had a language that was Kotlin but with Groovy syntax. Certain ways Kotlin defines things just doesn't mesh well with my thinking, especially since it's such a departure from Java's syntax, such as using "fun" for declaring functions and methods. Why not just do like Groovy and just define them with parantheses after a method name?
@@Yous0147just put in the effort to learn something for once in your life.
So you are the guy who doesn't like to have fun...
Kotlin has been pointless since like Java 11
I’m realizing something more and more: When people complain about languages, they are most often complaining about how most people use the language and not the language itself.
Well, the design choices of a language often affect how people tend to use it.
I feel like Lua is the most obvious embedded language for things that aren't browser engines.
Why dont browsers use Lua.
Seriously that language is just used in everything. I think torch used to be a lua library until python fags got mad and ported it over to python.
I would much rather use lua over python. I started off with Lua cus of roblox so i might be biased, but the sheer simplicity of that language makes it nice.
the side quest to make a "this nuts joke" is one of many reasons I'm subscribed
I started programming when i was 10. I first learned Java, (for Minecraft, obviously) then C++ (for Arduino, obviously) then Python (i fucking hate it so much but i use it because libraries). I know a ton of other languages, but I prefer java for everything. If there's a good library in java, I use it, so I dint die waiting for my code to run before it checks syntax.
Im 25.
It’s amazing how we share a common backstory. I also started programming 10 years ago in Java for Minecraft, mods - plugs - etc... Funny enough, also transitioned onto C++ for Arduino (around 7 years ago). At this point, I’m also quite good at swift, python, kotlin, php, javascript (including typescript) and more.
Java is my favourite. Python is my goto for scripting. I only use C/C++ when necessary (ie. Arduino/ESP/PIC), and other languages based on the platform I’m building for.
I’m 23, currently running a startup.
I read a lot of Lawrence's articles. My favorite is "Write code top-down", which I've been doing ever since.
As a C# developer, even though i am supposed to be anti-Java, i'd prefer using Java over JavaScript anyday if i have yo use a language for everything i build. Its a great language even though it has a too much boilerplate problem.
If I have to make a histogram I’m going to bust out the TI-83
Your content really does get me hype to work. You have such great energy
I felt personally attacked when you mentioned the chart backend example, thank you
The correct answer to the language question is "depends on the task. I use C# for game dev, Go for web backends, JS for pure web front ends, Dart and sometimes C# or Go for cross-platform front ends, and Python for building chat pipelines into docs for all those other languages."
Honestly, I'm glad I started with windows batchscript & java.
Ew windows
Java is underrated
1:30 I think you missed out on a C. S. Lewis quotation here....
"The first qualification for judging any piece of workmanship from a corkscrew to a cathedral is to know what it is-what it was intended to do and how it is meant to be used. After that has been discovered the temperance reformer may decide that the corkscrew was made for a bad purpose, and the communist may think the same about the cathedral. But such questions come later. The first thing is to understand the object before you: as long as you think the corkscrew was meant for opening tins or the cathedral for entertaining tourists you can say nothing to the purpose about them." - Preface to Paradise Lost
15:00 Sure Foo x = new Foo() is just 3 useless characters.
But that won't hold up if you need a new FooFactoryAdapterDongleFactoryBuilderBuilder
Java can be written without crazy abstractions as well unless you need to pull in some library that cultivates this caricature approaches you mention. And even then you can encapsulate this into some internal class. But I agree this huge amount of abstraction is really hard to get into and wastes time and obscures things.
I'd argue that's not the language, that's architectural patterns independent of Java. No one is forcing you to design your code in such a way.
A good IDE will offer you to complete the name after 5 characters at most.
this comment gave me vietnam flashbacks. i still love java though.
1:03 Well, I get your point and I agree if I'm looking at it through a purely technical perspective, but to be fair the game industry basically transitioned from Scaleforge (Flash) to React/JavaScript, so not much has really changed in that sense. And my guess why they use these technologies is to allow artists/ designers to design and implement menus themselves without needing a developer, which saves dev time. Designers 15/12 years ago typically learned Flash in college and since flash is basically dead outside of the animation realm colleges now teach them HTML/CSS instead so this transition makes sense. So in a way it kind of is the right tool because of the circumstance I mentioned above.
The right tool is C.
UI? C
Engines? C
Subsystems? C
'but you need JS for web'. No, you don't. The web was better without the js idiocy of the last decade.
This!🍀
Except that engines are all written in C++, not C
@@theshermantanker7043 That's not the case at all my friend.
Some of the very best and most stable ones are written in C.
And what about the most stable and secure operating system kernels, like BSD and Linux?
The answer is C and not C++. And there are good reasons for that.
Segfaults? C
@@iXPilot Skill issues?
One of the best things i ever did as a developer is pick a "New Language of the Year." I would focus on a specific aspect or paradigm of programming and pick a language to use for random tooling, or as a (bad) solution for many problems that weren't mission critical.
I've now got many tools in my toolbox that all have specific features that make them good for a specific task. Need math, i got R. Need purely functional and types i have Haskell. Scripts with quick and dirty UI, tcl/tk. Meta programming, Scheme/Racket. Been a programmer for 20+ years so i have a dozen more.
wow he talked about C# without making a spitting sound. Looks like some sort of personal growth.
We have the same problem when we talk about proper domain boundaries, people complain that writing mappers is boring and tedious and it is but it's also very easy to test and maintain that code. And it's your job.
"I just choose the right language for job". I effectively said this for tools in general with my interview with ThePrimeagen but I did caveat it with you need to know the alternatives. If you don't know the alternatives, you can NEVER say it is the best tool for the job because you only have one option. It is by definition the worst choice too because it's the only choice.
And when it comes to programming languages, I am one of those weirdos who is a polyglot who knows literally 100s of programming languages because that's kind of what I do for a living. So knowing "the best language" in that case is because I know the alternatives; most people don't.
Knowing about 100s of languages is not knowing 100s of languages.
@@gerciusthat Ginger Bill fella on which comment you've made a remark unironically designs and writes the languages, so he actually can know this amount
@@Mglunafh What kind of depth of knowledge are we talking about, writing "Hello, World!"? I do not see, how is it possible to be proficient with 100s of languages unless you have eidetic memory or similar abilities.
@@gercius you must've misunderstood me. By "Writes the languages" I meant "writes the compilers for languages", not the "writes some programs on languages". At this point I'd assume that for being efficient in this endeavour one should consider diving into various languages on a routine basis and sniff out some intricate details for better understanding of the formal language theory behind the features and technical details implementation-wise.
If that's a language barrier, then yeah sorry, I'm not a native speaker
@@Mglunafh Thanks for clarifying. It makes more sense.
I use Java for 90% of everything. I have builds from Java for J2ME, Android, J2SE (SWT and Swing), native, and HTML5. I even have the ability to do Flash, Applets, and JNLP outputs if they came back. Nearly all of the other 10% is Javascript for simple webpages. Oddly my WSYWIG editor is JSON output from a Javascript tool called GDevelop.
10:46 people who say python is slow are those who fail to do things the pythonatic way. Python is good at string processing but if you compile your regex inside the loop it's your fault.
People write python like they're not thinking about the underlying code at all then complain it's not as fast as C. Yeah it's not, but at least try to leverage the way the language is built over C in very predictable and understandable ways.
"Is there a way I can make this go through optimised paths within cpython instead of doing generic manipulation in the context of the interpreter" is the question to ask, and exactly what "pythonic" means in the end.
"REFACTOR LATER".
Yes!
In almost 25 years in enterprise, I've not met a situation where refactoring later was the wrong choice. And any time an optimisation was made earlier a refactor generally needed to change it.
Solve for now.
Ada. That's the other language where once it compiles, it probably runs right.
In the UK on July 5, 1948 the NHS was created. Within a week, there were reports of it being “on its last legs” or “about to go under”. Seventy-six years later it appears to be here still, different to how it started, but still here and still the same headlines about it being about to go under. Feels the same about Java, known even SME’s use spring boot projects for mission critical stuff.
I have been playing with Zig for about 6 months. Other than it changing so damned much it has been real fun. Well maybe it is so much fun because it is so new. I agree with your quick diagram but I do not really find C all that tough (done dev in it). Rust is REALLY hard to get productive in. Go is literally super easy (and probably almost as fun as Python to write). Zig is almost as safe as Rust, almost as fast as C, almost as easy as Go. Just kind of in that magic perfect spot.
Hey, my answer to "What's your favorite language?" was also "There is a language which works best for a specific type of work. But I like Python." Then he said, "So you mean, you have worked with many languages and have a versatile skill set?". To which I replied, "Nah, I do 1 or 2 languages, I don't like doing every type of work. I always have power to choose a work that I should do or not." and I landed a job of a salesman.
8:26 never mind java is that what's left of Kermit wrapped around you microphone stand?
I like your argument about the "If else" statements. Most of the time that logic will just run fora fraction of a millisecond. If it is slow we can optimize it later, stacking up the work-hours.
I only say “depends on what I’m doing” because my favorite languages are Python and C. If Python had an alternative to front-end JS frameworks, I would never touch JS again
Htmx implied?
@@leeroyjenkins0 Serverside rendering is usually a bad idea ... I don't want to pay for the CPU cycles (and the horros of maintaining state and sessions) of displaying stuff at client computers. I want to offload as much work as possible onto clients actually.
@@dominikvonlavante6113 depends what you're doing I guess, probably not ideal (perf-wise, which isn't necessarily only factor) in most cases if you're doing frequent updates no. But if you don't want to use JS there you go.
Unless you want to have a python interpreter in JS, which sounds wonderfully awful. But who knows with wasm 🤔
In C/C++, if-else hinders the generation of jump tables since you can evaluate any expression. Switch, on the other hand, forces you to evaluate a single type that is easy to generate a table. This might not be true if the compiler can reason about the if-else statements, but it's a rare case (if the expression is trivial), This might be true for the other languages, but it's true for most of the compiled languages.
and you can use constexpr to switch on strings :).
Java for maximum job security... And job dissatisfaction and maintenance exhaustion.
I feel like PHP beats Java in those departments
@@bionic_batman If you want maximum job security get into Oracle or MS. You will never get out...but you will never have to apply for a new job either. Sounds like hell to me.
8:25 hits different. I'm currently in the same exact situation and I know full well that I'll be the only person ever going to do stuff with that project ahaahaha.
God damn I hate how relatable this is
for everyone raging about react, or js embedding into c++ / games etc, you have to understand soemthing: its not JS people want, and its certainly not React specifically, its html+css+js. Its the easiest and simultaneously the most powerful ui toolkit, and that is why so many native developers even are reaching for it... IMO what we need is an embeddable dom rendering engine with bindings for a better language directly like potentially Dart... Imagine writing native components in dart that just worked in the browser, and could be embedded into native applications. That could be done, but the browser manufacturers and w3c don't do it because they are already all in on js.
Many people, me included, are still hoping for WASM to get access to the DOM the same way JS has. This would allow any languge that can compile to WASM to also render on the DOM directly. Right now you can do it in Rust in a roundabout way with automatically binding to JS bindings you can call from WASM, but it's slower and has limitations that makes it wonkier to use.
"the most powerful ui toolkit", really?
@@vitalyl1327 yes "Its the easiest and simultaneously the most powerful ui toolkit". The alternatives are full on pixel shaders (too difficult/time consuming for uis) or native ui toolkits (too limited for achieving super custom designs). Am I missing something?
@@nomadtrails there is a whole range of alternatives. From the approach similar to Dear I'm GUI to things like Tk (which is insanely versatile and vastly underrated).
@@vitalyl1327 ImGui pitch literally says it is not designed for UI for end users. For Tk, I just checked out the 'modern' tkdocs website, and took a peek at the button widget, and man... you have to be kidding me. My guess is that you have never programmed a UI with web tech. I would recommend checking out svelte. Then revisit Tk, and tell me which is simultaneously more powerful and more easy.
> If you need fast string processing
Perl is knocking on the door
Modern Java isn't so bad, I'd argue it's better than C#, give Java 21 a try.
I know JavaScript, Java, Go and Rust. The one time where performance did matter and I recommended Go because it's very fast and has a small footprint I was told by a Senior we always write Java lets write this also in Spring Boot :)
To the man with only a hammer, every problem appears to be a nail. Expand your toolkit
I love the article because I just came back to Java last year after almost 10 years and I can't agree more.
Just write everything in Java, it's just not worth the effort to do it in other languages.
If I really need something I can't do good enough in Java, I do it C or hell in ASM even
Java for everything is a 2004 Sun Micro take. 2014 was already too late.
I feel like java got better lately. java 8 was okay, since 11 and now espeically with stuff that got new in 17 and is expected to be in newer LTS versions, java is kind of decent.
other languages are still more fun by themselves. but combining javas improvements lately with the vast ecosystem of usually well proven, production ready libraries in the ecosystem make it a powerful tool.
The complexity curve - great illustration
what about writing in the language you like, and only writing the part in the necessary language when you hit the wall?
A few years ago I started to learn programming on my own and chose C as my first language. I love it and are half way through making a game in it. It's a lot of fun
To be honest, I'm a C# dev and I try to use it whenever possible. My time is most valuable and I see little point in wasting it by deliberately choosing a language I'm unfamiliar with. On the other hand, if there are existing libraries in Python, I'm not gonna be an idiot and try to parse Python into C# - even though it's possible.
I think you should know 1-2 languages well and use others when you absolutely have to or really makes sense in terms of time effort.
Same, everything I do can be done with C#, outside of web development (no, I'm not gonna use Blazor) so I learned Svelte+Typescript because I don't hate myself enough to use React
Well, I think one would do well to learn different paradigms.. write something semi-substantial in languages like Haskell, Ocaml, Lisp, Prolog.. maybe Erlang/Elixir and Rust. Even if you don't end up writing your stuff in those languages they teach valuable lessons about pros and cons of very different approaches to problems... and you can borrow some ideas from them.
Or.. you can just write code and be happy.
For C# devs it makes sense to know a medium bit of C/C++ and PInvoke because then you can use C-Style DLLs.
It doesn't have to be fancy C++ because what DLLs expose is data structures with a fixed layout that can be recreated in other languages, so it's structs, it's always structs and pointers to structs.
I love it. Throwback Thursday. I also love your Anchorman look. It’s amazing.
the main complaints for java were verbosity and startup/runtime overhead
both of which are entirely solved with kotlin... want to do something in the relm of low level (like zig/rust) go kotlin native...
want to do actually typesafe javascript? -> kotlin with targetting js,
want wasm? sure you can do that too,
want to do everything? web/native/server and whatever... go kotlin multiplatform...
jetbrains will absolutely dominate programming language and tooling world in ~10 years... they are fuckin smart about it, and no one absolutely no one is doing anything to even be remotely competitive.
Its great, its just Gradle and everything around Kotlin that sucks (package management and stuff).
@@bobderbraumeister6919 it will get solved, i dont like gradle either, but its such a small problem compared to having one language to share code in all platforms i don't really care about that downside... we have to mess with builds so rarely that its irrelevant.
Having misread your nickname as "kremlin" and then reading about domination gave me a chuckle
@@bobderbraumeister6919 what about gradle sucks? (Genuine question).
I didnt like it at first, but the more I use it, the less I'm bothered by it.
So much so, that nowadays I prefer gradle over maven
@@lengors7327 most problems with gradle boil down to them using groovy so you have no completion when working with plugins, you are in js developer mode, copy pasting shit until it works, instead of working with the api of the plugins. Also many issues boil down to "upgrade to newer version or lower version to make it work"... backwards compatability being broken etc... its not consistent
Well, I just love the Java API. When I used it, it literally gave me everything I needed to know about the language and syntax once I learned to read it properly(that took me some time). All other languages require a tutorial.
Java is great because it's the ideal middle ground.
It's statically typed at compile time, but dynamic at run time.
At first I was dismissive of this article. But having done Java as DevOps a bit, I now see the value of the article.
Java is dated, yes. It has some poor defaults too. But what people forget is that the JVM is a freakin' amazing piece of software, and it doesn't force you in any way to use Java as a language. Use Kotlin, target the JVM, be happy.
The article is still correct.
Java is orders of magnitude faster then js/python and that's why it is suitable for a large set of problems that require more performance. Not just because the author is good at it.
The same could be said about Go.
I had to build servers for ad tracking. The old php backend was able to handle 30 Mbit/s of incoming traffic per server. cpu on the befiest server we could by from our hoster was at max with php. The new backend rewritten in go and optimised with running profiling in production easily saturated 1 gbit/s with moderate resource utilisation.
Use C#. It can (nowadays) work as scripting language very well (top-level statements), it comes with 90% of the stuff out of the box (and the 9% is in nuget packages), it works on all major platforms, and many minor ones (nowadays), is actively being improved, is "quite fast" by default, and it can be improved to some pretty ridiculous point. And if even that is a problem, you can trivially bind an external dll (on Windows AND Linux and probably mac xD), which can keep your hand-rolled assembler ultra-fast solution.
Or use F#, if you swing that way,
Being slow is not primarily b/c of the language choice, the root cause is the different mindset of the developer who chose ruby/php/... over C#/Java/... It is a mindset which prefers speed of development over good engineering. The same way as "enterprise" developers gave a bad reputation to java, but java was never that bad, its just that those "enterprise projects" were so horrible.
Nah. Java is really like that. Very opinionated towards enterprise
I'm reading this comment after making a change to the Ruby system that was terribly slow in one spot. The guy did split the search function into several classes to add abstraction, but in doing so, he created an N+1 problem. Also when rendering the list, each element included a select menu containing around 5,000 items. No wonder it was running like crap.
On the other hand there are places in the codebase that would be at least 10x faster if it was written in Go, there is no way around this.
My problem with Java is that in my experience despite all the improvements in recent versions, we're all stuck writing Java 8 (or 11 if you're lucky) at most corp jobs.
I bet modern java is nice, but if I wanted to use modern java it'd have to be in my free time, and at that point I'll write rust
11 years of writing groovy, hello
Hi 🥵
I am starting a new job writing groovy in 2 weeks, this is where all the tech jobs are going!!!
Using one language for everything is handdicaping youself, for front end react, js, angular, etc, for back end c#, C++, and sometimes java.
Kotlin or Java or Both are great to work with
3:50 As Prime would say: "Groovy mentioned! Let's go!!".
Me: Assembly
The interviewer: 😳 what?
Me: which one?
LLVM ir
2:45 C# has been quite fast ever since they introduced the ability to compile your code directly to binary instead of running it in .NET's CLR. It may not be quite as fast as a some of the insanely optimized JVM's out there but it's plenty fast for the vast majority of applications.