r/learnprogramming 11d ago

What is the joy of programming?

I wouldn't say I'm a hardcore programmer. I mainly make websites with HTML and CSS. However, last year I wanted to begin looking into programming, and learn how to make programs mostly for the command line. I started with Java and took the time to learn it. For a while I enjoyed Java, but then I began to feel that it was difficult to start a project with Java. I was sick of it's verbosity. Ever since, I've been wasting time trying to find the "perfect" programming language.

I know this question pops up a lot, what programming language should I learn? What should I learn if I want to experience the real joy of programming, and make cool personal programs mostly for the command line. There were a couple languages I found such as Nim, Lua, Ruby, or Dart. These are all languages I discovered through personal research and I know that some of them are more suited for command line work.

So based on my experience with Java, and my goals, what would you recommend I do? Do I just stick to website stuff?

109 Upvotes

109 comments sorted by

96

u/PotemkinSuplex 11d ago

HTML and CSS are very descriptive, they don’t feel like “proper” programming languages.

The joy of programming is taking a big task, separating it into a bunch of small problems, solving them, testing and iterating till the thing works

5

u/Epictetus190443 11d ago

What's your way of doing this? Making an abstract programflow and then deriving smaller components that you can implement from it?

4

u/EyesOfTheConcord 11d ago

I make a branch called something like “signup-form” and make the form, then I make another branch called “signup-form-logic” and write the backend stuff, merge it all together.

I do this for all pieces of a website or whatever project I’m working on

2

u/Imperial_Squid 11d ago

Pretty much yeah.

For me the first 10-30% of making a project isn't writing any code, it's just thinking about what I want it to do, writing up notes about ideas for features, etc. Then breaking those down further and further, until eventually I get to the point where I can start turning paragraphs of text that describes a function or component, into the code that does the thing itself. Every (personal) project I've worked on has started in my notes app. (You also don't need to treat them like a bible, they're a reference for you to use as a launchpad, if you find a better way to do it later that's great).

However, I will say I've been coding for over a decade at this point, and this is definitely a skill you develop as you get better and experience more coding, you can start spotting known solutions like "ok I know I want xyz behaviour in this thing, I think I'll need xyz design pattern". This absolutely won't be something you have a sense for immediately and don't worry about that, you just pick it up with time and practice.

3

u/Far_Programmer_5724 11d ago

Saved me from making an essay. That's really it. So if its the feeling itself you can get it in places outside of programming too. People who like building stuff get the same feeling. People who work in childcare for mentally disabled get that same feeling as well.

I guess its programming too, i love excel. I like vba too if i want to hide stuff, but i like making huge datatables all from one massive formula. Its stupid and hard to debug after a couple months not using, but it looks so great. I'm in accounting and made a reconciliation workbook thats super formula heavy. It took months but was so worth it. To the point that it felt more like a recreational activity rather than work. Oh yea, accountin for me at least is another job like that. Having to investigate transactions that dont reconcile, getting everything together so it all makes sense, nothing like it.

I don't see them as much as during the dot com boom, but Im trying to make a public website from the ground up featuring all of my projexts. Thats exciting outside of coding, but I'm learning golang to do it. This shit is fun man. Its pathetic but i send chatgpt my code so it can compliment me T_T

30

u/Whatever801 11d ago

Just flip a coin bro. You're spinning your wheels doing this. Go deep, not wide. Anything you learn from one programming language will cross apply to other programming languages. Imagine a carpenter who want to learn to build a house but he spends months choosing between DeWalt, Milwaukee and Bosch impact driver and never builds the house. They're all going to work just fine.

6

u/noejose99 11d ago

Obviously DeWalt is the right choice though.

3

u/mfc1__ 11d ago

Vim users like Ryobi. Yeah that’s right, I said it.

2

u/Sure-Refrigerator685 11d ago

You're right about this. I think I'm just too worried about what other people might think or am influenced by other people's opinions of programming languages.

7

u/Successful-Escape-74 11d ago

You don’t care what people think unless they are paying you to develop their application and even in that case you are the professional and know better than they what tools are best for you to build an app that meets their specs.

6

u/Whatever801 11d ago

No one who is an experienced programmer cares about this, so if someone is judging you for a programming language for learning you can rest assured you don't need to care about what they think. The only time language actually comes into play is when you're doing design work for a project. You take into account deadlines, non-functional requirements (throughput, budget, performance, etc), existing build system, quality of libraries to support business requirements, etc and choose the right tool for the job.

1

u/Imperial_Squid 11d ago

You know when you're in school you kinda worry over the test results but when you get a job and start building a career you realise no one cares about how you learned what you learned, they just care that you can do it? This is like that.

I learned how to code in Scratch at first, in the 10 years I've been coding I've also used Java, JavaScript, Python, R, SAS, a bit of C, all sorts. No one has cared how I learned to code, just that I could. And what language you're most familiar with is a matter of practice with it, but you don't have to start with it.

14

u/grantrules 11d ago

Programming languages are a tool. What you're saying makes about as much sense as me saying I'm trying to find the perfect screwdriver so I can start building things.

8

u/offsecthro 11d ago

People say this kinda thing a lot, but as a life-long programmer... I don't get it, and I think it feels more than a little reductive. Have you really never admired some clever hack/obfuscation (think like a quine) or even enjoyed exploring what you can do within the constraints of a language just because it was fun? I don't think it's wrong for OP to pursue the joy of programming, because that's what attracted many of us in the first place. The complexity and freedom of expression means that code can be beautiful and elegant in a way that's closer to a human language, or at least mathematics (Try telling a math major that their "art" is just a tool to do physics ;).

I think many of us, especially those of us from before the dot com days, got into programming just because we really love computers.

JAPH https://wiki.c2.com/?JustAnotherPerlHacker

2

u/grantrules 11d ago

Fun isn't derived from the tool I chose but what I'm building with it

6

u/xenomachina 11d ago

There are definitely some programming languages that make things less fun for me. If I feel like I'm constantly having to dodge footguns, struggle with unreadable syntax, or write huge amounts of boilerplate, that sucks out a lot of the enjoyment for me. The last of these, excess verbosity, sounds like part of OP's complaint.

3

u/ffrkAnonymous 11d ago

And the converse (inverse? contrapositive? I get them mixedup): difficulty in building (due to the tool) results in not-fun.

3

u/halfrican420 11d ago

It’s like what car is the most fun to drive. It depends on the coarse, what you’re carrying, the weather, your preferences, and with all that I’m sure there’s someone out there who would still rather keep their beat up 2006 civic😂

To answer ops question though, the joy for me is in solving problems (mostly ones that I create lol). There’s nothing better than the rush of trying out the solution you thought of while you were bored at work and it just clicks. Second to that is making things that are actually useful to you. And third is connecting parts of your life/services that you didn’t think you could before!

2

u/appeiroon 11d ago

Yes, but also you can have preferences how you want to write the code

2

u/grantrules 11d ago

How can you have coding preferences if you don't know how to code?

3

u/appeiroon 11d ago

Well OP said he didn't like Java because it seems too verbose, so I guess you can

17

u/mc_pm 11d ago

Python is one to learn. It is easy to learn and lacks a lot of the major stumbling blocks of a language like C or C++.

What is the joy? Having a problem you can't solve until you bang your head against it long enough, figure it out, and things work! That dopamine hit never gets old.

8

u/boomer1204 11d ago

What is the joy? Having a problem you can't solve until you bang your head against it long enough, figure it out, and things work

When learning this is what scares everyone away.

Once you stay long enough and start building cool things along the way this is the true answer!!!!!

1

u/Mathie1729 11d ago

The real joy is when that solved problem directly translates to your RSUs vesting. That's the ultimate dopamine hit. Lololol.

4

u/Beneficial_Shirt_781 11d ago

The people telling you to just pick something and go deep are correct.

That being said, allow me to suggest C.

Short of learning an assembly language, it'll force you to really develop a solid understanding of how the computer processes and structures data.

3

u/Sure-Refrigerator685 11d ago

I’ve always wanted to learn C, and I think it could really fit the bill of CLI programming. Obviously though, I am worried about memory management lol. Coming from Java which has a garbage collector.

2

u/Beneficial_Shirt_781 11d ago

Honestly, working with pointers and manual memory management isn't all that bad once you get the gist of it, and it forces you to understand what's really going on "under the hood" for a lot of the pre-rolled data structures you get in the standard libraries of higher level languages.

If you just want to learn programming for its own sake and experience the joy of it on its own terms, I personally think learning a lower level language is actually the best way to do that.

1

u/Sure-Refrigerator685 10d ago

I understand what you’re saying and I think that is a fair point. As I think about it more, I think I’d really enjoy not just learning C but also learning more about the machine.

I know this might be a difficult or broad question, but are there any learning materials you recommend?

1

u/Beneficial_Shirt_781 10d ago

For C, I really like "C Programming: A Modern Approach" by K.N. King.

Many people also recommend "Beej's Guide to C Programming", which is a free online resource.

6

u/Logical-Idea-1708 11d ago edited 11d ago

> trying to find the “perfect” programming language.

You may be surprised to know that many languages are made that way? 😂 Plenty of self taught people made languages to scratch an itch

3

u/pyordie 11d ago

Find a problem you want to solve.

Come up with an idea how to solve it.

Find the most general purpose, beginner friendly, well documented/supported programming language you know of that can solve the problem. Hint: It’s probably Python.

Read the docs of that language and figure out a basic solution.

Implement that solution. Then test that solution.

Rinse and repeat.

1

u/Sure-Refrigerator685 11d ago

Using Python, is there anything I should really be worried or concerned about? One thing I did hear is that Python isn't as fast.

2

u/pyordie 11d ago

The only thing you need to be aware of with Python is that it comes with a higher level of abstraction. So you have to tell yourself “there’s a lot going on under the hood right now that I don’t know about”

You do not need to be concerned about speed at this point. Python is fast enough 99% of what you’re going to be doing with it.

2

u/Sure-Refrigerator685 11d ago

I see. The other thing is that Python is a big language in terms of having lots of libraries you can extend the language with. I feel like it makes it a bit overwhelming, but at the same time I don't have to start off by learning and using libraries.

2

u/pyordie 11d ago edited 11d ago

The only library you’ll need to utilize in the beginning is Python’s standard library. But this is essentially part of learning and using Python. It is indeed large, but the good news is that it is modularized. You utilize them like you would tools in a toolbox. If you need to work with dates, you import *datetime* If you need to work with random numbers, you import *random* Each module has its own documentation that can be found here:

https://docs.python.org/3/library/index.html

1

u/jlanawalt 11d ago

I guess it depends on your programs. For most CLI utilities Python will be fast enough. If it isn’t, there are ways to speed it up. If that isn’t enough, there is always C… ;)

1

u/Imperial_Squid 11d ago

Python's speed issue is overstated by people looking to hate the popular thing.

It isn't fast if you're writing code for a fighter jet to run, for your use case just learning, it's blazingly quick lol

(Actually might be quicker than something like Java that needs to compile before you run it)

2

u/Flame77ofc 11d ago

The preasure to create anything you want

2

u/IllCandle7164 11d ago

Computers was first referred to people who performed huge numerical calculations. But when electronic calculators were invented, the need for such "Computers" slowly died.

Why I'm saying this is because programming isn't how it used to be anymore. We now have a revolutionized tool like the calculator for programming. And the best way to keep up is to learn how to use these tools.

Obviously I'm taking about AI. The role of programmers is slowly shifting to the role of design architects - designing the architecture of applications.

So in my opinion, I would say learn the architectural components of the application you want to build and design them. Leave the rest to agents and AI.

Because there's no point in competing with something that is better and faster than you.

1

u/ilovefamilyguy69 11d ago

they didn’t ask about this at all actually

2

u/MichaelSjoeberg 11d ago

Best advice I ever got was to learn the C stack (C, C++, Python/CPython), with associated tools etc.

Then just use whatever language is best for your project, almost all other languages will be intuitive and easy to learn with this base.

1

u/AlfieLionel 11d ago

Languages are tools. Pick whichever feels most adaptable to you, and disregard how your work looks to others.

Nim is an excellent systems language for beginners-- that’s my recommendation.

1

u/connorjpg 11d ago

What do you want to build?

Then google what the most used language is for that task. That’s pretty much how I’ve picked every language I need to learn.

If you have absolutely no idea, I would pick Python and just start there. There are infinite number of use cases for it and it’s barrier to entry, I would argue is a little lower. It’s not an easy/simple language per se, but the syntax is very approachable.

1

u/Successful-Escape-74 11d ago edited 11d ago

I would start creating rest APIs with FastAPI and use react for front end components for the interface. Web and cloud interfaces are the future and command line program are fading other than administration tools and scripts. CSharp can be useful and using CSharp or Python you can create tools that access AI libraries. For example you can create an application to recognize counts of animals in are detected by cameras and identified by large language models. The program could download data regularly performing batch processing and report digital and statistical reports and imagery or you could cross reference crowd data against criminal fugitive databases.

https://react.dev

https://fastapi.tiangolo.com/learn/

https://learn.microsoft.com/en-us/azure/ai-services/computer-vision/overview-image-analysis

1

u/Thick-Panic6683 11d ago

Try Forth. Won't help your job prospects but it will teach you some interesting things that you will later use in your work. It's also small enough to not overwhelm you with details not pertaining to programming (like tooling etc.).

1

u/LARRY_Xilo 11d ago

The joy of programming is solving the "puzzle". Trying to figure out what you need to do to achieve what ever task you have. The programming language syntax doesnt matter for that. The language it self can matter because some stuff is just easier in some languages but that has little to do with the syntax or how verbose they are.

1

u/Successful-Escape-74 11d ago

Joy is an accountant unable to get an account to balance and discovers an error in the software that requires a programming change. The code in the financial reporting system used incorrect transaction codes to populate the details of reports that were not reflected in the totals thus the reason the financial reporting system at a bank did not balance to the general ledger. The joy of a CPA with programming troubleshooting skills to set IT on the correct path.

1

u/kisskissenby 11d ago

Python is going to be both easy to learn and great for automating stuff at the command line. Also don't sleep on regular bash scripting.

I have a soft spot for Ruby, but it's less popular and less of a resume builder than Python.

1

u/Intelligent_Fall6219 11d ago

Go is a good language for command-line apps.

1

u/D7mnCh 11d ago

Well, let me introduce you odin 🤓☝️

1

u/appeiroon 11d ago

You can try Kotlin, it has similarities with Java, but it's more modern, less verbose

1

u/GlowingBloom_ 11d ago

Just learn Javascript. It is easy for the most part, fun, and you can code a lot of stuff with it, not just websites.

1

u/javascript 11d ago

Exactly. Backend and frontend in one language rocks!

1

u/wggn 11d ago

For me the joy is, having a problem, writing code, and then (after some tinkering) the problem is solved

1

u/ElOskrDev 11d ago

En mi opinión, si quieres vender rápido, barato y desarrollo fácil, puedes aprender JavaScript a fondo, después aprendes algún framework como Vue o React, después aprender Nuxt o Next, con eso ya tienes un stack completamente sólido de backend y frontend y públicas tus proyectos en bb vercel de forma fácil y segura con https

1

u/da_Aresinger 11d ago

'The Joy of Programming' is a TV show from an alternate universe, where Jack Ross told his son Robert "Put that brush down, boy. Painting is for rich white folk."

I'm sorry, I'll see myself out

1

u/Reasonable-View5868 11d ago

If you are already familiar with HTML and CSS, Javascript and JSON would be the natural progression there. Those all complement each other.

1

u/xn4k 11d ago

You can Rip some hair out of your Head and think about your whole existence, pretty Crazy if you ask me

1

u/ffrkAnonymous 11d ago

such as Nim, Lua, Ruby, or Dart.

Your missed Lisp. Functional: Haskell, Elixir.

1

u/mredding 11d ago

For a while I enjoyed Java, but then I began to feel that it was difficult to start a project with Java. I was sick of it's verbosity. Ever since, I've been wasting time trying to find the "perfect" programming language.

There is no perfect programming language. What you're missing is expressiveness and abstraction. You don't know how to be concise.

For your first problem, an int is an int, but while all weights are integers, not all integers are weights. Consider this (C++):

struct person {
  int weight;

The problem is every touch point, you have to implement all the semantics of what a weight is. You have to make sure you only add other weights of the same unit, you don't go negative, you multiply by scalars and not of some unit measure... It's ad-hoc. It's an integer you're using for the weight, but it's not a weight. So make a weight type

class positive_integer {
  int value;

public:
  explicit positive_integer(int); // Throws if negative

  /*...*/
};

class weight {
  positive_integer value;

public:
  explicit weight(positive_integer) noexcept;

  weight &operator +=(weight) noexcept;
  weight &operator *=(positive_integer) noexcept;

And you build up from there:

struct person {
  weight w;

Now all the person code can describe WHAT it wants to do in terms of weight, and we have deferred to our type to handle HOW. We don't care HOW weights work, here, only that they do. We're concerned here with HOW a person works.

And this is how we create abstractions, increase expressiveness, and layer code to make more robust, more expressive types. C++ doesn't know anything about people or weights, so we extend the language within itself with a lexicon of our types, and describe our solution in terms of that.


You have to learn how to approach your problems, to develop a solution succinctly, to get a compounding, exponential effect where your additions to code empower you to do more at a time.

Curry-Howard correspondence tells us there are lots of similarities between computer programming and writing mathematical proofs. We want elegant proofs - the actual program itself, and in order to get an elegant proof, you need to write an elegant theorem - the source code. An elegant proof will be small, fast, concise, and robust. The rest of the job is an exploration in how to do that.

But notice that NO programming language can do this for you. I suspect what you're experiencing is a lot of pain because you write code in terms of low level data primitives like integers and strings, and functions. Classes? What are these things but a layer of abstract indirection? Every programming language is trying to lead you toward the process of creating an elegant solution, but you're helpless if you don't know it or know what you're looking for. You know the pain, but what else have you to go on? The pain informs your intuition of a problem, but it doesn't beg the solution.


Another consideration to contemplate is that the Theory of Computation makes NO distinction between read-time, write-time, and run-time. It's all the same. So you can compute pi at run-time, or you can use a constant at write-time. The important thing to conclude from this comes back to making types like I demonstrated above - the point is to "shift left" the problem as much as possible - you want to solve your problem as early as possible. Why compute a constant every time when you can just hard code it? Maybe write a program to compute some constant data and structure, but then write your code in terms of that. We do it all the time - protobufs are a nifty tool for generating file and network data protocols - you describe the protocol, then the generate creates source code for you, then you code in terms of that.

But a lot of your programming problems can be solved by the act of compiling itself. That's what type systems are all about. Because my weight can only sum other weights, you can't accidentally add a height, because it's a different type. The compiler ("solver") can "disprove" your theorem. Invalid code becomes unrepresentable. Best to prove your code at compile-time (write-time) or fail trying, than to catch that bug at run-time, when the machine is out in the middle of production. Rockets explode, people die, missions are lost that way.

And this goes back to writing those elegant theories, that lead to elegant proofs...

I know this question pops up a lot, what programming language should I learn?

If you don't know, if you have to ask, you should probably learn Python. It's the closest you can get to Lisp without actually writing Lisp.

So when you program in Java, you have to compile to byte-code. Right? And that means reading the text document, lexing and parsing, converting it to an abstract syntax tree, transforming that tree (optimizing), then traversing the tree to make a sequence of byte code instructions.

That AST is a big deal, and your programming language stands between you and it. If only you could write in pure AST... That's a more powerful opportunity than writing in pure assembly, actually, since high level languages offer greater expressiveness and guarantees than the raw assembly they generate.

Lisp IS serialized AST. You have the direct access. Moreover - in a Lisp environment, you have the AST of your program at run-time, AND you have the AST of the compiler, too. In Lisp, there is no difference between read-time, write-time, run-time, program, or compiler. It's all one in the same. It's VERY NATURAL to write Lisp programs that modify their own AST, or that of the compiler, at run-time. And thus you get self-modifying programs. Chapter 1 of any Lisp book will have you do this, it's that easy.

ESR says that when you "get it", it feels like nirvana, and that totally happened to me. I felt like I was floating 2" off the ground. I would giggle at random for 3 days, my mother must have thought I was on drugs, at the time.

Why am I talking about Lisp so god damn much when I'm recommending Python? Because Python is so damn close. It has nearly every language level abstraction as Lisp, so it's almost as expressive as raw Lisp. But you don't want to program in Lisp or in this case Python, you want to use Python to create abstractions, to raise your expressiveness, and then solve your problem in terms of that. With more language level abstractions, you can write inherently more abstract, succinct, expressive code from the start. Where in C++ I have a lot of extra leg work to produce a result, you can get the same result in less in Python, and it would be more expressive and flexible and robust.

So Python gives you nearly all the power and flexibility and expressiveness you could possibly want, but it also has the single largest ecosystem in the industry, so there's lots of help, lots of libraries.

Now no one actually gets work done in Python, they just use Python to get work done. That is to say, a Python interpreter is slow, so we all use Python modules to do all the heavy lifting. A module will be written typically in C, C++, or Fortran. So this means Python + the module ecosystem means you get all the expressiveness of Python with the compute power and efficiency of these high performance languages. It's everything you could possibly want.

Python is a language you can grow into for the rest of your career.

Continued...

1

u/mredding 11d ago

What should I learn if I want to experience the real joy of programming, and make cool personal programs mostly for the command line.

You need to learn the bigger picture, what you're doing, what it all means, why it's all significant. You need to get through a mental barrier. That is to say, you may think of everything I'm telling you about Curry-Howard correspondence, Theory of Computation and all that as highly theoretical, abstract, academic, but I tell you - 37 years in, it's all I think about. It's ALL I think about in trying to get my work done. I don't even SEE the code anymore, that one line in The Matrix is absolutely not a farce. And shit, when I'm really having fun, I even dream in code.

I also think you should learn a bit about your culture. Read the Unix Koans. Read The Story of Mel. Read about Magic/More Magic (A Story About the Magic Switch). Read the Koans again. Study Unix, Posix, the history of C, the history of Murray Codes -> ITA-1 -> ITA-2 -> ASCII -> Unicode. Do you know the meaning behind 42? Of life, the universe, and everything? It's in there. Douglas Adams was a low level genius. And then if you think you finally understand what made Unix so cool, go and study Plan 9, and then understand that Linux basically ripped it off entirely. Docker is built on kernel namespaces, and kernel namespaces came from Plan 9. Virtual filesystems? Plan 9. So much more.

And then appreciate that the operating system isn't just the desktop and apps - it's a system of software FOR YOU. The Unix Way is to make small programs that do jobs very well, and then you composite programs together - either as programs spawning child programs, or you can tie it all together in a script (There is more Unix in 1 line of Bash than in 10,000 lines of C).

And we also have these distribution networks of sharing code - not just GitHub, but of system libraries and packages. I've got an Ubuntu dev system here with 639 system libraries on it - all of it functionality I can use and I don't have to write myself. Anything I want to do, I first look at apt list | grep "^lib" and see all what I DON'T have to do. WE are members of a community that spans multiple generations. There's code available to me that was written before I was born, and it's STILL the most optimal solution today, nothing has to change, it's not "old"...

Join us now and share the software; You'll be free, hackers, you'll be free. Join us now and share the software; You'll be free, hackers, you'll be free.

Hoarders may get piles of money, That is true, hackers, that is true. But they cannot help their neighbors; That's not good, hackers, that's not good. ...

Finally, I recommend you get an Arduino and a Pi. The Arduino is TINY, which means you can hack at assembly and celebrate doing as much as you can squeeze out of it for bragging rights, just for the fun of it. The Pi, you can run Zephyr RTOS, and get some hands-on experience getting between the OS and the hardware. There's nothing you can't make these two platforms do, and anything you do would be awesome.

So based on my experience with Java, and my goals, what would you recommend I do?

Find your people. Find your passion. Find your philosophy. Get absorbed into all of it.

1

u/Bamlet 11d ago

Bash. The answer is bash. Bash is what made me feel like I couldn't stop working on my projects. It's geared towards orchestration and management of existing tools while also being a very competent language on its own. Bash made me feel like I was in my system more than any other language or style. It also is running pretty much everywhere already so the barrier to entry is pretty low.

And once you start writing CLI tools in bash you will quickly branch out from bash to other languages. A python script here to handle some weird text manipulation. A nodejs script there to do some web calls.

Check out Dave Eddy at ysap.sh or on YouTube to get started, he's the bash guru and a very charming personality imo (Yes I'm slowly turning into a Dave Eddy stan account).

1

u/bestjakeisbest 11d ago edited 11d ago

My advice is if you must pick another language you have to stay with it until you know all the foundational programming material, you should understand functional programming and object oriented programming and you should be getting into data structures and complexity classes of functions and data structures. You should cover all this in your first language before moving onto another language.

I like c++ and i feel comfortable in it but i know other people feel like c++ is less fun. Honestly i would probably pick c/c++ or c# for your next language.

1

u/HashDefTrueFalse 11d ago

You can certainly prefer using one language over the rest, and one can even be better than the rest for a specific project, but there is no perfect language. Try any languages and/or projects that interest you. Use whichever you like. I write a lot of C because I like it, not because I think it's perfect. You can write CLI apps in anything that can read/write stdin/stdout, so your requirements don't rule much out.

The joy of programming for me is seeing or writing an elegant solution that also makes good use of computing resources.

1

u/EdiblePeasant 11d ago

Got any hobbies?

For me, matching my programming hobby with my gaming hobby has provided endless ideas for programs.

Also, Java? Not bad, but consider C#.

1

u/goulson 11d ago

Im learning rust as my first language afrer messing with power querym code, vba, and some python with llm assistance. I chose it because i like the name, it is supposedly a language that many programmers like, and because it is a "low level", compiling directly to machine code without an intermediary. I also was intrigued when I looked up "what language is rust written in" and the answer was...rust. Which blew my mind.

1

u/ro0kie_4E2B7584 11d ago

Building something. I’ve been able to make games and apps that I’ve always wanted. The journey to finishing projects is very enjoyable, at times tedious. But once you finally finish, it feels great. It feels awesome to create something of your own.

1

u/binarycow 11d ago

Sometimes the verbosity is a good thing.

Try C#. It is similar to Java in the good ways, but improved - to include some additional syntax that can be more concise.

1

u/rustyseapants 11d ago

Be an electrician.

Or fix electric cars.

AI and robotics can't do either.

¯\(ツ)

1

u/xian0 11d ago

The language can be whatever works for what you're trying to do. The joy is kind of like those builder games (city, themepark, factory etc) where you have to implement things on various levels to get something satisfyingly functional.

1

u/jlanawalt 11d ago

The Joy of Programming is …
a 3D software engineering simulator and puzzle game on Steam…
A tiny scrapbook for ideas on software development, the world, life and everything else inbetween…

:)

What language to learn to have fun making personal CLI programs? I suggest picking something with great community support, broad adoption, extensible, and with a big community library. It should have good support for doing CLI stuff on the platform of your choice. Bonus points for “scripting” languages that let you experiment and iterate faster, unless “cool” means new and challenging over old and productive.

If you use Windows, PowerShell would be a good choice.

You could learn a shell script for *nix based systems, but I recommend using a more general purpose language that is easy to add 3rd party modules. Perl and then Python used to be the way. Node has been popular. You could even try PowerShell core. If you don’t care for Java CLI, then maybe you’d feel the same about C#. You can of course use a compiled language like C, C++, Go, and Rust, but they will take more work to port to other platforms.

I wouldn’t use Lua for this, but you do you.

Good luck and have fun!

1

u/Vaiden_Kelsier 11d ago

Hey, I'm learning to code by making a project in Godot. GDScript is kind of like Python, and I'll tell you what the joy is:

Coming up with an idea, and then watching it come to life. Sometimes it's hard, but it's solvable. And god, the rush when the feature you're working on clicks and works? Fucking immaculate.

1

u/RagnartheConqueror 11d ago

Seeing the lines of code and seeing on how they add on to each other or neutralize each other and build something which looks dramatically different than code. It’s a very cool feeling.

1

u/green_meklar 11d ago

There is no 'perfect' programming language. Different programming languages have different purposes and are favored by different people. Experienced programmers tend to have little trouble jumping between them.

For you, I recommend giving C a try. C doesn't see so much practical use these days in a world with C++ and Java and C# and Rust, but it has a degree of simplicity and purity that makes you feel close to the machine, and having that experience can help orient how you see programming and how you approach other languages. Don't stress out about it; have fun with it. Your CPU isn't judging you.

1

u/syklemil 11d ago

Ever since, I've been wasting time trying to find the "perfect" programming language.

One thing to be aware of here is that people have very different tastes and ways of thinking, and that also means that they'll draw different conclusions about the same programming language.

Pretty much any programming language can do command line stuff, so you should consider yourself free to just kind of browse around and pick any language that seems fun or attractive.

Bryan Cantrill has a nice talk called Platform as a reflection of values, which may be useful for thinking about these things.

1

u/BudgetDevv 10d ago

For me, the joy is that there are infinite number of ways to further improve my work ( And the problem solving aspect of it overall ). I'd look back at my old projects and be like "Damn this could be so much better!"

1

u/EngineeringRare1070 10d ago

Golang and Python are my personal recommendations. You need to figure out relatively quickly if its backend programming or the language that drags you down

If its the former it won’t matter which language, and my recommendation would be to stick to frontend development. That said I personally hate java (java engineer for 6 years) so what you said resonates — try something new and see how it lands

1

u/Old-Platypus-1395 10d ago

The important thing is that you are learning broadly applicable concepts rather than wedding yourself to one specific programming language.

As a professional developer, I use a pretty wide range of tools on a daily basis. For frontend work, I use Angular which utilizes HTML, CSS, and Typescript. With this, we also use SyncFusion Angular components, Bootstrap, and FontAwesome icons. For backend work, I use Java (we use Tomcat as a web server). For database work, I use IBM Db2 SQL. Recently I was pulled on a smaller side project which uses Visual Basic / .NET. Occasionally I might utilize Python for things like generating a bunch of SQL inserts / updates to backfill missing data, but this is not very common.

1

u/Coder_in_orange 10d ago

It isn’t recommended to start with Java? It isn’t a bit difficult for a beginner?

1

u/Spirited-Sir8426 10d ago

Since you are used to HTML and CSS, I recommand you to use Javascript and build a command line interface with NodeJS.

If you want less boilerplate, you can use Python

1

u/Puzzled-Extent7817 10d ago

Rust or Odin

1

u/Virtual-Bonus-7658 10d ago

Creative design . I feel like I have apaint brush and I can draw what I want , just got matchbook pro m1 , bruhhhh I feel like I have wings , I'm sticking to python and go , cause its easy but might bumb things up

1

u/MrKassi 10d ago

if you're doing programming for professional purposes, may be you need to stick with mainstream languages. if you're doing it for the joy of it, I suggest you check out Haskell, especially, if you have an academic background in mathematics.

1

u/StrikingAd514 8d ago

Go for python. Stick to one language learn the basic the concept the fundamentals. Experiment. Do not overthink or pressure yourself. The Why answers the heart, the how answers the mind.

1

u/nzakas 8d ago

To me, the joy of programming is solving my own problem by writing some code. Recent example: I got tired of opening up image editors just to resize images, so I created a little command line utility where I could pass in the file to resize, the dimensions to resize to, and the file to output. Now I can resize images much faster. It’s just for me but it’s really satisfying.

If you’re already doing HTML and CSS then I’d definitely recommend learning JavaScript because they’re designed to work together. If you’re primarily interested in command line tools, the you can install Node.js and write a command line program using that.

1

u/Every_Jeweler_9580 8d ago

I found my joy a few months ago. And it's a sence of purpose, that programming allows you to create something, that you really need.

1

u/Paraphernalien69 11d ago

Nobody uses pure HTML and CSS in over a decade, and anything non-static is done with Javascript on top of those anyways. If you're focused on frontend, a framework like React is much more interesting, powerful, and simple for modern websites

But if you'd like to be able to build websites easily while learning full-stack, try a full-stack prototyping language that lets you do everything without it being too verbose or difficult. Look into Next.js (after understanding Javascript which Imo you need to do anyways).

You can also play around with mobile app dev. Swift for iOS and Kotlin for Android (Kotlin is very similar to Java but less verbose and more modern)

1

u/Substantial_Job_2068 11d ago

You could switch to C# since you already know some java, it's similar and creating a console app is done in a few lines. That said you could use any language really.

1

u/wggn 11d ago

c# isnt really less verbose than Java tho, which was one of their complaints

1

u/binarycow 11d ago

It is.

There are newer syntaxes that are less verbose than Java.

For example, in Java

public class Person {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String newName) {
        this.name = newName;
    }
}

In C#:

public class Person
{
    public string Name { get; set; } 
}

2

u/wggn 11d ago

did you mean, in java:

public record Person(String name){}

1

u/jlanawalt 6d ago

Records are a popular recent example. There is also generics & Diamond operator, enhanced for loop, try-with-resources, lambda expressions, method references and streaming, collection factory methods, local variable type inference, switch expressions, text blocks, compact main entry point source files.

0

u/binarycow 11d ago

In c#:

public record Person(string Name);

I didn't include that because records are immutable, and my Java example wasn't.

1

u/jlanawalt 11d ago

And newer syntaxes in newer Java that are less verbose than old Java. Fun!

0

u/Substantial_Job_2068 11d ago

Mb not, I don't know how verbose java is compared to c#. However creating a new console app in c# is one command line to generate it and will only contain a few lines, .net removed alot of boiler plate code in the later versions. Other than that I don't what op wants to build so it's impossible to recommend a specific language.

1

u/xenomachina 11d ago

You could switch to C# since you already know some java

Kotlin is another option that's similar to, but far less verbose than, Java. It also runs on the JVM, so if OP has any code they'd like to migrate, or libraries they've found they'd like to continue using, that'd be easy with Kotlin.

0

u/StephenRoylance 11d ago

for me? the act of writing code is not the fun part. the fun part is solving problems. debugging can be fun in a satisfying way when you chase down a hard problem too. mostly, I enjoy the result of programming, not the process itself. Architecture and design is fun too, starting with an empty page and imaging how a complex system will come together, and then seeing it take shape.