OT: Java or C++?

chris m.

Doctor of Teleocity
Joined
Mar 25, 2003
Posts
10,353
Location
Santa Barbara, California
I'm meditating on the word verbose. Some verbosity in a programming language isn't necessarily a deal breaker.

If I were to compare two solutions to the same problem, written in two different languages, and try to reduce "which solution is better?" to a single criteria (this a thought experiment, I realise real life is too complex for such reductions) I think I come up with:

"Which is more elegant? Cleaner/Clearer?"

A lot of that is down to the developer, not the language, but the language and its libraries support that.

You could ask which is more robust, more maintainable, more extendable, more efficient... but if the code was handed to me as my future responsibility, I vote clean and clear.
I was reading somewhere that there are gazillions of functions and subroutines that have been written in some of these languages that are flawed....and as people use these flawed subroutines (which may call on other flawed subroutines and functions), inevitable bugs are manifested. The subroutine or function may have worked as intended for its original application, but embedded gremlins are waiting to emerge when applied to new situations....

So as someone who doesn't work in this world but just reads about it and is curious.... Is it possible that a given computer language starts out very clean and clear, but that over time it becomes a bit cryptic and chaotic because of the accumulation of not-so-well developed and documented subroutines and functions? (The real scary part is thinking about how things like rockets, weapon systems, aircraft, nuclear power plant automated monitoring systems, automobiles, etc., might have gremlins lurking in their software due to this problem! The bug is ID'd only after catastrophic failure and the follow-up investigation.)
 

boop

Tele-Holic
Joined
Dec 1, 2018
Posts
582
Location
Massachusetts
If you are just having fun and want to do some personal projects I would consider Python. There is a reason Python has become the most popular language. It's got a low barrier to entry, it's high level, expressive, and there are tons of libraries that you can easily install that will do anything you can darn imagine. You can get a more done, faster in Python than in Java. If you are thinking about employment, then there more Java jobs than C++. If you are just geeking out and want to learn lower level how-computers-work stuff, then sure, C, C++ or assembly :)

I don't know C++, but there is a very actively developed hobbyist OS being build in modern C++ that I learned of through the founder's youtube channel: https://serenityos.org It's pretty neat what they are doing.
 

BigDaddyLH

Tele Axpert
Ad Free Member
Joined
Sep 1, 2009
Posts
61,840
Location
Kelowna, BC, Canuckistan
I was reading somewhere that there are gazillions of functions and subroutines that have been written in some of these languages that are flawed....and as people use these flawed subroutines (which may call on other flawed subroutines and functions), inevitable bugs are manifested. The subroutine or function may have worked as intended for its original application, but embedded gremlins are waiting to emerge when applied to new situations....

So as someone who doesn't work in this world but just reads about it and is curious.... Is it possible that a given computer language starts out very clean and clear, but that over time it becomes a bit cryptic and chaotic because of the accumulation of not-so-well developed and documented subroutines and functions? (The real scary part is thinking about how things like rockets, weapon systems, aircraft, nuclear power plant automated monitoring systems, automobiles, etc., might have gremlins lurking in their software due to this problem! The bug is ID'd only after catastrophic failure and the follow-up investigation.)

Languages do grow over time. For example, Java had generic types, annotations and lambda expressions added.

Library code is the real culprit, but as for bugs, if a library is in active use I trust it more than homegrown code -- more eyes on it, and new versions with bug fixes promoted regularly.
 

tomasz

Tele-Holic
Joined
Dec 18, 2007
Posts
945
Location
Europe
I would bet on lighter technologies nowadays, JavaScript. node.js, react, mongodb are a common stack. Python is useful too. It depends on what is you application I guess
 

cometazzi

Tele-Afflicted
Silver Supporter
Joined
Dec 3, 2019
Posts
1,966
Location
Wisconsin, Das Land von Käse und Bier
Wow, I expected this thread to be at the bottom by this morning. Lots of great replies, I'll try to catch up:
As a former software developer, it’s only fun at first. Unless you have some great ideas for software that hasn’t been done before, I wouldn’t bother.

You're not the first person I've heard say that. ;-) However, my interest in programming is sort of a nagging feeling that never goes away. Doesn't mean I'll be any good at it, and I might eventually burn out from it if I do it enough. Won't know until I try though, eh? I bet it keeps me off the streets in the meantime.

Only if you want to work for a Big Tech company or a hip start-up. There are a lot of in-house IT departments that don't have age, and other, biases. That's why I've worked in the IT departments of logistics and manufacturing sector companies for the past 12 years or so, with a few side contracts in marketing.

So far as the job market goes, it's best to have some flexibility in languages and the ability to learn new things quickly. I've worked with dozens of different languages, frameworks and database systems over my 30+ year career. In my current job, I work with VB6, VB.NET, C#, JavaScript/NodeJS and Java along with different frameworks for each as well as SQL Server and Progress databases. Which one I work with depends on what Agile stories I'm assigned to in a Sprint.

As for the 2 languages you mentioned, it depends on the type of work that interests you the most. C++ is mostly used for low level development these days, such as embedded systems, device drivers and services. Front end UI development is relatively rare in C++ these days. Java is more common in general purpose programing and knowing it makes it easier to learn similarly syntaxed C-based languages (JavaScript, C#, Kotlin, Swift, etc.).

I'll pass on the hip startup for sure. I'm old enough now where I want stability, not excitement. A big tech firm wouldn't turn me off, but as you say I'm not their target with no formal education in programming. The type of work that interests me:

* The same things that most video games are made of, but I don't want to actually be a "game dev". That sounds like a rough lifestyle. So, graphics and modeling and threading. Simulations seem to cover the same ground, but I feel like I'd have to also have some decent physics skills for anything real-world.

* Embedded. I have dabbled a bit with some microcontrollers such as the AvR. My other hobby is electronics, so that sort of bridges the two. Again, no formal education, all self-taught. With the AvRs I was writing code in C, which I like quite a bit. I do also enjoy OOP though, for the situations where it is appropriate to use.

* System programming, and/or Applications. Yes these are different things, but they are more tied to the hardware than say, web applications.

Things that I'm not so into, but maybe I need someone to convince me otherwise:

* Web development, at least front end. I don't know why, but it just doesn't interest me. I know people can do this and do well for themselves, but I can't get excited about it. I'd say "change my mind!" but it's not that I won't do it, it's that I just don't want to.

* Android or smartphone/tablet/etc stuff. Again, I can't get excited about it and again it's mostly beholden to an evil corporation. Granted, a lot of formerly embedded stuff is turning into Android stuff now. Some years ago (when I was playing with AvRs) people were building IoT devices on Arduinos, but these days they look like they're more like an rPi running some custom Android image. Again, change my mind if I'm wrong.

Install Linux if you haven't already. A VMWare virtual machine will suffice.

I've been a Linux and BSD user since the 90s. I don't even bother to dual-boot anymore, I've got two workstation setups in this room. One runs Windows, the other runs Linux (my firewall runs OpenBSD). 99% of all the code writing I've done has been on either Linux or UNIX systems. The small exception was some Python scripts I wrote at work to bang around some spreadsheets or database dumps and generate reports.

bash/sh/tcsh etc are avenues I've been down as well. I went from bash to perl for a bit, but I didn't really like perl a whole lot. Not as much as some of my friends, at least.

I learned C at my first job ever, at Ampex, writing code for custom peripherals for commercial video editing systems (Z80 based keyboards and touchscreens). In my spare time, I developed a DOS-based MIDI sequencer (now I'm really dating myself, it was the early 80s). When the compiler vendor (Datalight) came out with a C++ compiler I incorporated some of that into the program.

Fast forward to about 10 years ago I taught myself Java to incorporate another guy's open source library into an application I wrote called "SpinCAD Designer" which is used to develop DSP algorithms for effects pedals. I only used Java because the library had been written in Java.

My kids have both started taking CS classes online at the JC and started by learning some C++.

From the perspective of learning it for fun, my impression is that Java has a more extensively developed set of libraries for different things like displaying "file open dialog boxes", etc. Other than that, no real strong preference one way or the other. The JVM concept (being able to write code that is instantly cross platform) is kinda cool.

That's all pretty cool stuff. My local community college only offers Java and Python as programming languages, mostly because we have a large insurance company here that asks for more of each. I'm jealous of your kids' Junior College.

I've done so many languages over the years, some of which may not even exist anymore.

I'm currently working for a php and javascript (including turbo with a good smathering of React) shop.

Really as you said, learn as many as you can. And not just the languages, but the tools and frameworks too.

This is a great place to learn. https://www.hackerrank.com/

I'll check out hackerrank. I've looked at several options on where to get started or where to get serious.

On the Java side, I was once doing the University of Helsinki online Java course. It's highly recommended on Reddit but I found it to be very superficial and lots of "this code does X, now go write this code in the example" sort of style. A couple of books I've read went into much more depth and the 'why' code or libraries do things that I thought was missing. I bought a udemy course once and it wasn't very good either. Maybe it's the wrong attitude, but I stopped looking for web-based instruction for Java at least.

On the C++ side, I was getting put to sleep with the C++ Primer (thorough, but dry) and found a little better balance from Bjarne's C++ Programming Principles and Practice. Plus it has exercises.

Again, the thing that has always been an obstacle is time. I would get so far into any one language and then a new school semester would start, and I wouldn't be able to do anything with it for 4 or 8 months. There's a whole lot of OTHER stuff that gets tabled at the same time, so the non-school months (a la summers) are also pretty crowded. I graduate in a few months so I won't have that interruption anymore.
 

cometazzi

Tele-Afflicted
Silver Supporter
Joined
Dec 3, 2019
Posts
1,966
Location
Wisconsin, Das Land von Käse und Bier
Speaking of verbose, I ran into a post word count limit, so here's the other half:
I'm a professional software engineer and have been doing it full time for almost 23 years.

I learned C++ before Java, but I would not necessarily recommend learning C++ at this point unless it's strictly hobby.

C++ was kind of a research project.. it has changed dramatically over the years, the industry has always had a super hard time keeping up with it. Constant rewriting of code cause the language changed. And because the language was always a moving target and super complicated the average skill level of everyone writing it was pretty low. In practice many businesses had a very hard time producing high quality software with it. Elite developers did well with it, but as soon as you are making a product that requires a bigger team the quality of your code kind of drops to whoever is the weakest person on the team.

I spent a lot of time getting really good at C++ and even by 2000 the jobs were few and far between. I have almost always worked on Java. I know I would likely love C# but I'd have to transition into the whole Microsoft World.

Python is a good place to start. Javascript has lots of entry level jobs and a relatively short ramp up period. The thing with those two languages is they are very easy to learn at a beginner level but very difficult for teams to write large scale software with.. it's very easy to run into bugs because the languages are less strict with less protection.

Java and C# are good bets, lots of work out there. But maybe start with C or something. It's very valuable to understand how computers actually work, and C is a lot closer to that. The other aspect is the math aspect is extremely important separates the true pros from everyone else. Whatever language you want to work in the important thing is understanding data structures and algorithms.

Mobile software (iOS/Android) is a race to the bottom.. not really a good target, the business opportunities are not great there because the customers want everything free or for $0.99. If you're coming in without a degree and want to get gainful employment Javascript development for web development is probably the way to go. QA jobs are also a good entry place for people without a degree to get their foot in the door. You can go take a boot camp for Javascript and be making really solid money pretty quick.. I know people I've worked with (including one guy who was a guitarist who gave up on a pro career in that) who did that route and was surely making 6 figures within a year or two. He is a smart guy who works like crazy though. Most of the teams I've worked on though if you went and studied Java/C#/C++ and were interviewing for a position on the "back end" it would be vastly harder to get in the door without a degree.

Agreed on the C++ evolution. It seems like it may have matured and settled down now but you're the expert, not me. I will agree that Mobile/Android is no bueno, and fortunately I have no desire to get into that stuff. I know people say 'C# is a better Java than Java' but I'd also have to learn the whole Microsoft Ecosystem along with it. Not a bad thing, just more time. At 47 7/12ths years old, I don't know how much time I have left.


With the front end or full stack web development: Again, change my mind!

Just to comment on this... My employer was sued (big time) by Oracle and as a result, they ripped anything Oracle-related out of our code base and tools. We switched to Azul (formerly Zulu), an open source JDK and platform core. So we are still Java-based, but not directly beholden to Oracle. At least, not as far as the lawyers are concerned.

Yeah, see... I don't want to mess with that at all (the getting sued part). I understand that there are a lot of Java implementations now. Even openjdk is technically not beholden to Oracle (they just get funded by Oracle donations). I wouldn't be surprised if Oracle closes the source, or somehow locks out some proprietary features from openjdk and starts charging licensing fees for use and development.

I'm meditating on the word verbose. Some verbosity in a programming language isn't necessarily a deal breaker.

If I were to compare two solutions to the same problem, written in two different languages, and try to reduce "which solution is better?" to a single criteria (this a thought experiment, I realise real life is too complex for such reductions) I think I come up with:

"Which is more elegant? Cleaner/Clearer?"

A lot of that is down to the developer, not the language, but the language and its libraries support that.

You could ask which is more robust, more maintainable, more extendable, more efficient... but if the code was handed to me as my future responsibility, I vote clean and clear.

Good points. My first 'real' language was C and it's very small and (IMHO) very elegant. Python is also neato-frito in that you can get a lot done with few lines of code. True it also boils down to the programmer and how it's written. You can write unmaintainable garbage in any language.

If you are just having fun and want to do some personal projects I would consider Python. There is a reason Python has become the most popular language. It's got a low barrier to entry, it's high level, expressive, and there are tons of libraries that you can easily install that will do anything you can darn imagine. You can get a more done, faster in Python than in Java. If you are thinking about employment, then there more Java jobs than C++. If you are just geeking out and want to learn lower level how-computers-work stuff, then sure, C, C++ or assembly :)

I don't know C++, but there is a very actively developed hobbyist OS being build in modern C++ that I learned of through the founder's youtube channel: https://serenityos.org It's pretty neat what they are doing.

I did use Python a bit at work, mostly because I don't have a lot of skills in Excel. When I was a department supervisor, my predecessor showed me how to do the monthly reports in Excel. He'd dump a bunch of data, upload it into Excel and spend about an hour per report shifting things around and setting up calculations. I noticed that most of it was just sorting and manipulation of data fields over and over, so I wrote a couple of scripts to do the heavy lifting stuff. They'd slurp up the data dump, chew on it, and spit it back out into a different file in about 10 seconds. Then I'd spend about 5 minutes making it look pretty in Excel.

Python is super great for stuff like that, but larger applications can get a bit unwieldy, especially when you get into graphics and whatnot. Plus it's super slow. As a scripting or glue language though, it can't be beat!


I had totally forgotten about SerenityOS. Maybe I'll spin it up in a VM and check it out.
 

moosie

Doctor of Teleocity
Silver Supporter
Joined
Jul 18, 2010
Posts
19,800
Age
65
Location
Western Connecticut
I retired in 2007, so my opinion is almost certainly outdated. I spent a over decade as a systems developer, designing and writing in C++, for finance and telecom projects. Finance: writing a brokerage system from scratch for a major bank. Telecom: writing a complex test harness to monitor packet-level data and stress test the so-called Baby Bells.

C++ is strictly typed, which is a plus in a large and/or critical project, as it allows problems to be caught in design (compile) time, instead of run time. However, this can be a hindrance when requirements are changing frequently, and turnaround time is short.

Java was evaluated for some of the projects I worked on, and rejected. It didn't allow the necessary control, and generally didn't have obvious benefits over C++.

C++ strong typing is a plus in a large project, enabling problems to be caught at design (compile) time, instead of run time. But that can become a hindrance in fast-changing projects, where turnaround time is short.

For me, Perl is the language of choice in those circumstances. I've used it at a quasi-systems level, often in conjunction with C++, on several large projects. There's not much it can't do, and there's a massive open source library of modules. Being weakly typed ('cooperatively typed' LOL), it expects parties to play nice. The benefit is crazy fast development times, even with requirements that change on a dime.


I think a lot of the case for Java centers on it's platform independence. This was compelling when it was created, but not nearly as much now, with more de facto standardization at both system and user levels. Meaning, Linux or Windows on the server side. And if it's software that a human interacts with, it probably runs in a browser. Not always, certainly. It all depends what kind of development you plan to do.


I would find it more useful to muse about the 'feel' of each language, instead of who 'owns' it, or even how employable each one is. (That last one might answer itself if you decide what kind of work you'll focus on). Depending on how you think, how you approach design problems, some languages will be uphill all the way, and others will seem to be more supportive, requiring fewer workarounds. It's hard to explain, and it helps if you have some experience already, with at least one of the langugages.
 

raito

Poster Extraordinaire
Joined
Nov 22, 2010
Posts
6,659
Location
Madison, WI
I don't much like 'appeal to authority'. However, I've been writing code since before the single-board computer existed and spent my entire professional life doing it. My college career was oriented towards chip design, though I never took a job doing it. These days, that's all code, too.

Keep in mind, though, that for about the last dozen years all I write in at home is ANSI Common Lisp, unless forced to by circumstances (for example, still doing microprocessors/controllers in C, and the occasional foray into raw JavaScript when necessary). Current project is writing a Forth kernel in Common Lisp. I don't do IT. I do R&D.

Keep in mind I despise both Python and Java-the-language. At my last job, I maintained our custom Python version (it cut out all human interaction because there was no user interaction). I also was the guy hunting down bugs in Microsoft's z3 (theorem prover -- the sort of things PhDs write their dissertations about), as well as figuring out why PostgreSQL was messing up (we found a few bugs). Actually, part of my job was all the third-party code. I got to see a lot of sausage being made.

Yeah, Python's popular even though it stinks as a language. It has lots of libraries for reasons that aren't good. So does Java. They lend themselves to paint-by-number programming, which is why you found the online courses to be as they are. I'll admit that's efficient for the masses, but I want to be the guy authoring that stuff, not using it. I've spent much of my career doing just that.

I disagree that Python is all that slow. Much of that is in how it's used. I also greatly dislike it as a scripting language, either standalone or especially embedded into something else.

For both, I prefer Lua. Back in the day, the company I worked for wanted to farm out the development of an architectural lighting controller. Somehow, I was asked to review the spec. Part of it was 6 weeks to develop a language to describe the internal scheduling and whatnot in the controller. This is a hard enough problem to warrant a scripting language. But not a custom one. I red-marked that stuff. So the company sent a couple of their bright-eyed boys to see the old fart who didn't have a clue to talk some sense into him. The old fart (me!) downloaded the Lua source, unpacked it, wrote the VS project files, compiled everything (without even a warning!), then wrote an application which went both from C++ to Lua and Lua back to C++. In less than an hour. Try that with Python. Next version of their specs used Lua for the scripting. I also put it into our other products, those that would let me.

I never understood why Lua isn't bigger. Cleaner syntax than Python by far. The latest major version made the internals more uniform. Extremely cleanly coded in C. And unlike most languages, it's not chasing Lisp concepts because it already had them. I even authored a Lisp-style macro system for it entirely in Lua, and transparent once it was loaded.

One thing to keep in mind is that it sure looks like a lot of web and app stuff is done exclusively through libraries these days. The web because it's really tedious doing the HTML/CSS/JS thing raw and get it right. Apps because you have to do both IOS and Android. So, 2 evil companies, not one.

Game development is an entertainment industry, not a technology industry. Think of a game studio as a band and a publisher as a record company. Will all the sickness that comes with it.

Raspberry Pi usually runs some sort of Linux rather than Android. There's still a lot of Arduino and equivalent out there for smaller stuff.

Some way to write web stuff is good, but that sort of thing faces outward instead of inward. If you get my meaning. And these days, you can do some decent user interaction with processes running elsewhere, even on the same machine. Main product at my last job had a web interface and it wasn't completely awful to program.

Keep in mind that that 'local insurance company' has been dictating terms to that community college for decades. Used to be all COBOL and IBM mainframes. But if you look at their job ads, it's only the low-levelers they're hiring from that pool these days.

It is good to learn multiple languages with different paradigms. But just like human languages, unless you start bilingual, the second language is the hardest. Going from procedural to functional (sidetracking to figure out imperative and declarative) and from C++ style single-dispatch OOP to something like Smalltalk or Lisp's CLOS adding in something like Scala's lack of state to Erlang's multiple process model is useful for expanding your brain.
 

middy

Friend of Leo's
Joined
Apr 28, 2010
Posts
4,423
Age
51
Location
MSP
I don't much like 'appeal to authority'. However, I've been writing code since before the single-board computer existed and spent my entire professional life doing it. My college career was oriented towards chip design, though I never took a job doing it. These days, that's all code, too.

Keep in mind, though, that for about the last dozen years all I write in at home is ANSI Common Lisp, unless forced to by circumstances (for example, still doing microprocessors/controllers in C, and the occasional foray into raw JavaScript when necessary). Current project is writing a Forth kernel in Common Lisp. I don't do IT. I do R&D.

Keep in mind I despise both Python and Java-the-language. At my last job, I maintained our custom Python version (it cut out all human interaction because there was no user interaction). I also was the guy hunting down bugs in Microsoft's z3 (theorem prover -- the sort of things PhDs write their dissertations about), as well as figuring out why PostgreSQL was messing up (we found a few bugs). Actually, part of my job was all the third-party code. I got to see a lot of sausage being made.

Yeah, Python's popular even though it stinks as a language. It has lots of libraries for reasons that aren't good. So does Java. They lend themselves to paint-by-number programming, which is why you found the online courses to be as they are. I'll admit that's efficient for the masses, but I want to be the guy authoring that stuff, not using it. I've spent much of my career doing just that.

I disagree that Python is all that slow. Much of that is in how it's used. I also greatly dislike it as a scripting language, either standalone or especially embedded into something else.

For both, I prefer Lua. Back in the day, the company I worked for wanted to farm out the development of an architectural lighting controller. Somehow, I was asked to review the spec. Part of it was 6 weeks to develop a language to describe the internal scheduling and whatnot in the controller. This is a hard enough problem to warrant a scripting language. But not a custom one. I red-marked that stuff. So the company sent a couple of their bright-eyed boys to see the old fart who didn't have a clue to talk some sense into him. The old fart (me!) downloaded the Lua source, unpacked it, wrote the VS project files, compiled everything (without even a warning!), then wrote an application which went both from C++ to Lua and Lua back to C++. In less than an hour. Try that with Python. Next version of their specs used Lua for the scripting. I also put it into our other products, those that would let me.

I never understood why Lua isn't bigger. Cleaner syntax than Python by far. The latest major version made the internals more uniform. Extremely cleanly coded in C. And unlike most languages, it's not chasing Lisp concepts because it already had them. I even authored a Lisp-style macro system for it entirely in Lua, and transparent once it was loaded.

One thing to keep in mind is that it sure looks like a lot of web and app stuff is done exclusively through libraries these days. The web because it's really tedious doing the HTML/CSS/JS thing raw and get it right. Apps because you have to do both IOS and Android. So, 2 evil companies, not one.

Game development is an entertainment industry, not a technology industry. Think of a game studio as a band and a publisher as a record company. Will all the sickness that comes with it.

Raspberry Pi usually runs some sort of Linux rather than Android. There's still a lot of Arduino and equivalent out there for smaller stuff.

Some way to write web stuff is good, but that sort of thing faces outward instead of inward. If you get my meaning. And these days, you can do some decent user interaction with processes running elsewhere, even on the same machine. Main product at my last job had a web interface and it wasn't completely awful to program.

Keep in mind that that 'local insurance company' has been dictating terms to that community college for decades. Used to be all COBOL and IBM mainframes. But if you look at their job ads, it's only the low-levelers they're hiring from that pool these days.

It is good to learn multiple languages with different paradigms. But just like human languages, unless you start bilingual, the second language is the hardest. Going from procedural to functional (sidetracking to figure out imperative and declarative) and from C++ style single-dispatch OOP to something like Smalltalk or Lisp's CLOS adding in something like Scala's lack of state to Erlang's multiple process model is useful for expanding your brain.
This is exactly why I burned out on IT. We could have listened to the real computer scientists and educators and had secure and correct LISP systems and users familiar with data concepts since childhood.
Instead, we have buffer overflow hacks and “I don’t know where I saved it.”
 

raito

Poster Extraordinaire
Joined
Nov 22, 2010
Posts
6,659
Location
Madison, WI
This is exactly why I burned out on IT. We could have listened to the real computer scientists and educators and had secure and correct LISP systems and users familiar with data concepts since childhood.
Instead, we have buffer overflow hacks and “I don’t know where I saved it.”
https://en.m.wikipedia.org/wiki/Worse_is_better

Even Gabriel remains undecided, but I wonder if he ever had to end a project due to technical debt.
 

cometazzi

Tele-Afflicted
Silver Supporter
Joined
Dec 3, 2019
Posts
1,966
Location
Wisconsin, Das Land von Käse und Bier
I don't much like 'appeal to authority'. However, I've been writing code since before the single-board computer existed and spent my entire professional life doing it. My college career was oriented towards chip design, though I never took a job doing it. These days, that's all code, too.

Keep in mind, though, that for about the last dozen years all I write in at home is ANSI Common Lisp, unless forced to by circumstances (for example, still doing microprocessors/controllers in C, and the occasional foray into raw JavaScript when necessary). Current project is writing a Forth kernel in Common Lisp. I don't do IT. I do R&D.

Keep in mind I despise both Python and Java-the-language. At my last job, I maintained our custom Python version (it cut out all human interaction because there was no user interaction). I also was the guy hunting down bugs in Microsoft's z3 (theorem prover -- the sort of things PhDs write their dissertations about), as well as figuring out why PostgreSQL was messing up (we found a few bugs). Actually, part of my job was all the third-party code. I got to see a lot of sausage being made.

Yeah, Python's popular even though it stinks as a language. It has lots of libraries for reasons that aren't good. So does Java. They lend themselves to paint-by-number programming, which is why you found the online courses to be as they are. I'll admit that's efficient for the masses, but I want to be the guy authoring that stuff, not using it. I've spent much of my career doing just that.

I disagree that Python is all that slow. Much of that is in how it's used. I also greatly dislike it as a scripting language, either standalone or especially embedded into something else.

For both, I prefer Lua. Back in the day, the company I worked for wanted to farm out the development of an architectural lighting controller. Somehow, I was asked to review the spec. Part of it was 6 weeks to develop a language to describe the internal scheduling and whatnot in the controller. This is a hard enough problem to warrant a scripting language. But not a custom one. I red-marked that stuff. So the company sent a couple of their bright-eyed boys to see the old fart who didn't have a clue to talk some sense into him. The old fart (me!) downloaded the Lua source, unpacked it, wrote the VS project files, compiled everything (without even a warning!), then wrote an application which went both from C++ to Lua and Lua back to C++. In less than an hour. Try that with Python. Next version of their specs used Lua for the scripting. I also put it into our other products, those that would let me.

I never understood why Lua isn't bigger. Cleaner syntax than Python by far. The latest major version made the internals more uniform. Extremely cleanly coded in C. And unlike most languages, it's not chasing Lisp concepts because it already had them. I even authored a Lisp-style macro system for it entirely in Lua, and transparent once it was loaded.

One thing to keep in mind is that it sure looks like a lot of web and app stuff is done exclusively through libraries these days. The web because it's really tedious doing the HTML/CSS/JS thing raw and get it right. Apps because you have to do both IOS and Android. So, 2 evil companies, not one.

Game development is an entertainment industry, not a technology industry. Think of a game studio as a band and a publisher as a record company. Will all the sickness that comes with it.

Raspberry Pi usually runs some sort of Linux rather than Android. There's still a lot of Arduino and equivalent out there for smaller stuff.

Some way to write web stuff is good, but that sort of thing faces outward instead of inward. If you get my meaning. And these days, you can do some decent user interaction with processes running elsewhere, even on the same machine. Main product at my last job had a web interface and it wasn't completely awful to program.

Keep in mind that that 'local insurance company' has been dictating terms to that community college for decades. Used to be all COBOL and IBM mainframes. But if you look at their job ads, it's only the low-levelers they're hiring from that pool these days.

It is good to learn multiple languages with different paradigms. But just like human languages, unless you start bilingual, the second language is the hardest. Going from procedural to functional (sidetracking to figure out imperative and declarative) and from C++ style single-dispatch OOP to something like Smalltalk or Lisp's CLOS adding in something like Scala's lack of state to Erlang's multiple process model is useful for expanding your brain.

School is over now and I'm circling back to this. I got a lot of great responses but this one really strikes a chord with me. Maybe it's because you're kinda telling me what I want to hear... and if that's truly the case, maybe there's something I can take away from that: I definitely favor the low-level end over the high-level end.

I did like Java, but I always secretly wished it wasn't interpreted. The JVM is neat and it makes a lot of things easy, but I want to be closer to the hardware. I do have quite an interest in embedded, but I keep hearing it's both lucrative and difficult to get into. Probably takes a college degree different than the one I just got. "That one college" under the thumb of "that big insurance company" won't be any help here. "That Big University that owns the whole dang center of town" probably would, but for various reasons I don't think I'd be able to do that one. At least not for awhile. Maybe there's a different way.

I haven't done any single-board computers, just single-chip microcontrollers. Some years ago I played around with Atmel AvRs a bit, blinking LEDs and making noises as a response to stimuli. I know that's just baby steps but I feel like I could expand from there. Serendipity strikes, and a handful of (probably not fake) PICs showed up in the mail today. Embedded isn't flashy or sexy, but I can see it as personally satisfying. I like to think my interest in electronics is a nice complement, too. I can appreciate why writing a number to a memory address makes a specific pin go high or low, because I've built memory arrays out of discrete transistors before. Stuff like that.

You mention C++ (and lua) in embedded, which is encouraging. Days of yore (90s, when I was looking at books about the 8051) it was seemingly all C or ASM. I have no qualms about digging out K&R and rekindling my young adult romance with C, but I like C++ and what it can do (and I view them as related but different languages). I feel like I could use C++ for a lot of things once I get skilled up.

Python is neat and it has helped me out a lot, but it's got a lot of quirks and it has some design choices that make me go "WTF?". Also, I'm in the "whitespace as code is b.s." camp.

I haven't looked at lua but I've heard a lot of good things about it from people who really know their stuff. My guess on why it's not so popular is because Python has had all the thunder and momentum over the last 15 years. Paint by number, and all that.

Excellent way to frame the game studio and publisher- I hadn't considered that perspective, but I should have. While I most definitely do _not_ want to be a game developer as a career, I do want to dabble in that types of things for fun. On my terms. C++ can do that too, though I realize it's a different discipline than embedded dev. Java can also make games, but it's not the best tool for that job.

I have no interest in mobile development, or web development. "Facing outward, not inward" as you aptly put it. Ideally I would like to be as far removed from end users as possible.

Ideally I'd learn multiple languages, but obviously one at a time. My original question in March maybe should have been which one between C++ and Java to do first. There are a lot of reasonable arguments as to why it should be Java, but I think I've discovered that I was secretly hoping it was C++.

Again, lots of great answers in this thread (thanks to all) but this post has certainly given me something to think about. It's late now but perhaps tomorrow I'll look into avenues of C++ and embedded.

Or maybe I should put it all on hold again and see how far I can get into the Cloud Architecture side of things. It's what I've been studying the last couple years at least. It just doesn't seem like much fun.
 
Last edited:

Jupiter

Telefied
Silver Supporter
Joined
Jun 22, 2010
Posts
27,750
Location
Osaka, Japan
I'm still trying to process the "girlfriends will be gone forever in a few months" part...
 

Tonetele

Poster Extraordinaire
Joined
Jun 2, 2009
Posts
9,966
Location
South Australia
Outa my league Boys and Girls. I'm so old school I want a mower like Clint's in Gran Torino.
That was my job as a kid with one of those.;)
 

arlum

Tele-Afflicted
Platinum Supporter
Joined
Jun 7, 2018
Posts
1,894
Age
67
Location
O'Fallon, MO
In the water utility industry a C is a C no matter how many pluses you add to it. We prefer an A or B skill level. Top of the class. A good swimmer also gets high marks but floaters receive consideration.
 

bgmacaw

Poster Extraordinaire
Joined
Feb 11, 2006
Posts
9,572
Location
Near Athens GA USA
As a former software developer, it’s only fun at first. Unless you have some great ideas for software that hasn’t been done before, I wouldn’t bother.

I missed your comment the first time.

I'm not trying to invent any new great software ideas, I'm just, as @ricknbaker put it, trying to have a "pleasant and reasonably well paid life" doing corporate software development. The pleasant hasn't always been there thanks to awful management but I do enjoy the actual development work. It's kind of like playing blues. I may not be shredding in some oddball jazz progression and time signature but it's fun to me.

I do understand people getting burned out on it. I work with some folks like this. We call them "project managers".
 

Junkyard Dog

Friend of Leo's
Joined
Mar 7, 2016
Posts
2,635
Age
48
Location
USA
I guess the thing I failed to mention is that I'm in my upper 40s now, so I might be disqualified from software development as a career.

Not if you can pass a background check for a government security clearance to work on defense projects.
 




Top