T O P

  • By -

AutoModerator

On July 1st, a [change to Reddit's API pricing](https://www.reddit.com/r/reddit/comments/12qwagm/an_update_regarding_reddits_api/) will come into effect. [Several developers](https://www.reddit.com/r/redditisfun/comments/144gmfq/rif_will_shut_down_on_june_30_2023_in_response_to/) of commercial third-party apps have announced that this change will compel them to shut down their apps. At least [one accessibility-focused non-commercial third party app](https://www.reddit.com/r/DystopiaForReddit/comments/145e9sk/update_dystopia_will_continue_operating_for_free/) will continue to be available free of charge. If you want to express your strong disagreement with the API pricing change or with Reddit's response to the backlash, you may want to consider the following options: 1. Limiting your involvement with Reddit, or 2. Temporarily refraining from using Reddit 3. Cancelling your subscription of Reddit Premium as a way to voice your protest. *I am a bot, and this action was performed automatically. Please [contact the moderators of this subreddit](/message/compose/?to=/r/learnprogramming) if you have any questions or concerns.*


captainAwesomePants

Programming is humbling. It's far, far too big for anybody to master all of it, and part of that is because programming is ultimately just a way of formalizing recipes for doing stuff, and to really understand it you'd need to understand all of the non-programming stuff you can use programming to do. Just far too big. But the thing is, as you get over that, you get comfortable with not knowing about stuff, and you find that you're constantly exercising your "finding out about a new thing" mental muscles. Eventually you get to a place where you say "hey, I have no idea how video decompression works, I'm gonna go find out," and you read some stuff about it, and you write a tiny toy program that can very slowly turn an mpg video file into individual frames of video frames or something, and you feel great and you learn a lot. And if you do this a lot in an area that you already work in, you really quickly move into what sounds like absolute wizardry to people who don't know about that area. If you're learning about 3D animation and you describe how you've been learning about quaternions to avoid gimbal lock, somebody who's 100% focused on web backends or whatever is going to look at you like you're looking at John Carmack right now, but it's approaching once you get some context. You will be able to do these things! Except not like John Carmack specifically. Carmack is kind of a mad genius who has a long history of spitting out random musings in .plan files about whatever technical thing he's thinking about that make everybody reading it feel stupid. He's basically Leonardo da Vinci. Do not compare yourself to him. It will break you.


frankenmint

to add to this, Carmack IS great because he puts in the work day in and day out for decades. if you worked 12 hours ACTUALLY 12 hours continguous on complex programming problems that are pushing the boundaries of your given domain, of course you're going to look like a bloody whiz


AlSweigart

I read somewhere on the internet (so it must be true) that world-class level performers in whatever field practice about the same number of hours as regular expert-level professionals. It's just that when they *do* practice, they are practicing hard things that push them. They aren't just, say, repeating the same piano practice piece they already know over and over again. Practicing stuff we are familiar with is comforting. Practicing stuff that is hard and unfamiliar makes us say, "I'm never going to need to know this stuff, I should stop and try something else" over and over.


shagzula

A saying from a band instructor I heard was “if it sounds good you’re not practicing”.


EARink0

I'm stealing this, thanks! Sooo applicable to literally any skill; it can be tough to stay motivated while improving a skill because there's such a huge gap between what you *are* producing and what you *aspire* to produce.


obiworm

I don’t believe in ‘never going to need this’. If you have the time to learn it then you should. Even if you don’t remember everything, it’s usually enough to know that the thing exists and when it’s best used. That way, you have it in your pocket if you run into the problems that it solves, and you can talk about it with people who actually understand it more deeply. The best case scenario is that you find an out-of-the-box solution that you can make heaps of money on.


saggingrufus

Think of it like a professional musician. There are many people who have played for more hours on the guitar than I have. However, training I did to get into university and at university is very specific and pointed. Practicing is different than "jamming" and it's the same thing with program. Coding a solution is not sharpening your skill set, You need to do both. Sometimes you need to grind out coding a solution, Other times you need to not code at all and just learn something and practice, sometimes that's reading, sometimes that's working on memorizing a series of keystrokes. That'll make the rest of your day easier, The people who do the really hard stuff have a practice routine. The practice they do is different than the performance they give just like music.


FordCEO

That’s awesome, thank you for your comment


Dusty_-

I loved your explanation because I feel like some of us (including me) struggle with diving into a topics that sound scary on its surface but in reality its just mostly about our failure to tackle a subject head on. We create these smoke and mirrors before we even take our first step. There was a time where I lost motivation because I had terrible teacher trying to explain how pointers work; to add insult to injury I treated pointers as if its this grand mysterious concept. It wasn't till at least a year later I found a youtube video that explained it thoroughly. It was a complete failure of me taking action to learn how to ground a concept to make it something brain can wrap around, all because of fear? Anyways thank you for your explanation!


Xhaa

I learned more about programming on my own than I ever did earning my virtually useless programming associate's degree. I agree with this. I accelerated my learning and got through some pretty subpar instructors simply by using my own determination and resources like the Internet. This is just how you gotta be. The world isn't perfect and isn't going to just give you what you want or need. For better or worse, most of us in this field have to spend a lot of work time doing and learning as we do and staying in the loop on some things in our business or problem domain. Self-directed learning is a critical skill, even and especially in the age of GitHub Copilot and ChatGPT. That being said. Take breaks. Touch grass. Drink water. Sleep. Take care of yourself and don't forget to look away from the screen just to give your mind a break. Meditation and music or something that helps you balance and refocus are recommended. This whole thread has been encouraging to read in general!


CriticalTemperature1

100%, a lot of the great geniuses and innovators simply followed their curiosity into a prototype and that prototype into an achievement. Like DaVinci and the Mona Lisa, or Feynman and quantum electrodynamics


sneha_singh51

Awesome comment! Thankyou!


DrMux

>How did you start doing hard programming? It started off innocently enough, a line or two of Python at parties, ya know, but soon enough I had fallen in with a bad crowd and before I knew it I was doing PHP off sex workers' backsides. I'm clean now but every so often I get the itch, ya know... what I wouldn't give for just one line of code.


JR_C_

Hey..... you want a hit of this 0100100001101001


Agitated-Molasses348

0x48(((69)))


boardinthehous3

You guys have me crying stoppp 😩😂


8483

Must be the Angular


unleserlich

Keep away from free compilers, those are gateway tools!


QuokkaClock

thank God Haskell didn't get you.


tricepsmultiplicator

Let me guess you sicko, you also drive a Lambo?


JohnnyOmmm

Lamba *


Boguskyle

I’m in the same boat as you are, I feel like I’m on the ground level way below the giants walking around me. You will definitely meet people though that come from a background of those deep low level crazy programming things who very well miss other subjects because they follow what interests them the most, and that’s what you have to do: follow what interests you. There are tons of people out there that are, say, experts in AI but don’t know squat about _____. The person I specifically met loves C and assembly, and can make custom game engines and JIT compilers from scratch but would be very stumped at the WebDev stuff that I dabble in. If something seems too ominously challenging, break it down into smaller pieces. Also, learn and follow what others are doing, that helps tremendously in jumpstarting knowledge in a topic. Programming is a giant world, and you don’t have to travel the world to be considered a programmer. It’s okay to reside in a handful of countries, and perfectly fine to visit around. You’re psyching yourself out if you think this programming career path is linear and the end goal is this ultra-charizard genius.


WystanH

Even the most complex, overwhelming, project is still built one block at a time. Programming is the art and science of breaking unimaginably complex problems into many, simple, understandable, problems. When you program, you get stuck; a lot. However, the longer you do it the more you come to realize that you'll eventually find your way to unstuck, even if it doesn't seem that way in the moment. Knowing from past experience that you'll find a solution, maybe not the one you're currently envisioning, gives you the confidence to keep at it. An experienced programmer will often throw out solutions that look magical. How did they just come up with that? The secret to the trick is that they've already solved lots of similar problems before, probably enduring hours of frustration and doubt. Think of a cook who cracks some eggs and quickly whips together the perfect French omelette with apparently no effort at all. Do you assume this is the first time they've done it? Hell no! This perfect custardy egg cigar is the product of a lifetime of failed attempts and successes. Also, every code example you see online is the final, polished, version. That didn't just pop out of the programmer's head. That's the cleaned up version they were willing to show in public. This can be frustrating, as you know that kind of code wouldn't just come you. Trust me, it didn't just come to them, either.


tapeonwebcam

Thank you, this was very encouraging ❤.


John_Fx

Hard programming is just a bunch of easy programming piled up


7th_Spectrum

Depends on what you mean by "hard" programming. If you're talking about things like the video compression software you mentioned, that type of software is difficult because of the math/algorithms involved, rather than the code itself. If you want to get into that, it'd be helpful to learn about the underlying algorithms and how they work. Something like the video call app or multiplayer game are hard because they might have a lot of moving parts that are interconnected and introduce a lot of different technologies. With those, it's extremely important to spend a significant amount of time in the planning stage. Break problems down into smaller pieces, figure out what technologies need to be used for what problems, etc. Hopping in and building something without enough planning might lead to brick walls, needing to backtrack and re-work certain aspects, etc. I learned that the hard way many many times.


Left-Locksmith

TLDR: learn a language, pick a problem, and then spend lots of time researching the domain of your problem. Research is 80% of your job. I'd say you're pretty much on the right track. Edit: the degree of complexity of your project is inversely proportional to the degree to which you're willing to accept someone else's solution to some sub-problem within your project. Background: I've learnt some graphics programming. I'm now working on a simple 3D game without using any game engine or framework (save for graphics and media libraries). When people talk about learning programming, they usually just mean learning the syntax of some language, and maybe a bit of data structures and algorithms. Programming in the real world involves taking language knowledge, and applying it to solve a problem in some specific domain. Some examples of such problems might include: building a website to track organization wide productivity, creating a custom text editor, writing a program for a device that allows heaters to heat water to a specific temperature range, simulating the flow of liquid through a pipe, writing an operating system, etc. Necessarily, as a part of this process, you learn stuff about the domain of the problem you're trying to solve. For me that has meant learning matrix math, how geometry is represented in data, how a program talks to your GPU and your monitor, how existing game engines manage moving resources between memory and storage, and so on. If you make a multiplayer game, at some level I imagine you'll have to learn about the TCP/IP stack, web servers, on top of whatever you need to learn to stick an image on a window in the first place.


deftware

C and algorithms. Algorithms are my jam. Learn your basics, linked lists, ring buffers, binary trees, quadtrees, kd-trees, sorting, and then get into more complex stuff like intersection tests, collision detection, etc.. Look at how JPEG and PNG compression work. Look at some compressors/decompressors. Learn about how audio compression works, learn about the Fourier transform and its descendent the Discrete Cosine Transform, learn about the Fast Fourier Transform which makes the Fourier transform fast enough for practical applications. If while learning any of this it is uninteresting to you then you're going to be fighting an uphill battle. The guy who interviewed you, who wrote that software, it wasn't an uphill battle for him, because he likes it. It's his jam. He wouldn't want to do anything else in the first place, even if he was already rich. Algorithms are his jam, they're what spurs the dopamine release in his brain. If learning algorithms and being able to wield them doesn't do that for you, then you should be more like the interviewer guy and find something that does. There's no law or rule saying you have to write code sitting at a computer to find happiness and contentment in life. It's entirely possible that you could be much happier doing something totally different. Keep that in mind on your journey because I've seen way too many people who *think* they want to be a programmer, when it's just a grueling grind for them that they just aren't cut out for. Nobody for whom coding was a grueling grind ever does anything awesome by writing code - like build a big piece of software, or a game engine, that a company was started around and jobs were created by. The people who are not naturally drawn to programming and get off on it are the kind of people who get a degree in it instead of making projects, and end up working wherever they can get their foot in the door doing the bare minimum while everyone else there carries their weight for them. I'm not saying this is you, I'm just saying be wary of whether or not it is you. It's OK if it is, it just means there's something better out there for you than writing code. Not everyone can dunk a basketball but you don't see a subreddit about becoming a pro basketball player - yet we have a /r/cscareerquestions sub for becoming a professional programmer. People have been misled into thinking that anyone can be good at programming, and so they have this idea in their head that they'll make a good living just sitting on their butt writing code for the rest of their life - even if they hate doing it and/or aren't good at it. Be honest with yourself, and good luck! Feel free to reply with any questions, or if you need further guidance. I'm always out here helping out where I can to get people up and running.


deftware

I replied already, and I realized I hadn't explained how I started doing "hard things", or shared what I've done. Rather than edit my original reply I thought I'd just reply again. I started writing code in the 90s with qbasic, which was a streamlined version of BASIC from the earlier years of computing. I learned how to read/write files, and started learning about how different file types were organized, in terms of their bytes, and how to parse them (i.e. BMP and PCX files to use as sprites in projects). I learned trig functions on my own just taking apart other qbasic programs and teasing out an understanding of what the functions were actually doing. By the time I was 10 years old I understood how to take a yaw/heading angle and turn it into a 2D vector for moving stuff around the screen based on which way it was pointing (using sine/cosine). I understood loops and maintaining multiple arrays of properties for things and could make all kinds of simulations. I learned about 2D arrays and could code up a tilemap game or a wolfenstein3d style raycaster, or a sidescroller platformer, etcetera. It was all just bits and pieces of knowledge I'd slowly accumulated. By the time I started writing code in C, I'd already been messing around a bunch with QuakeC - the scripting language for Quake that compiles into a bytecode that the engine actually interprets with a simple virtual machine to effect changes upon game entities and the game state. QuakeC was literally a stepping stone between qbasic and C for me. When I got into C it was during the Windows 98 days, and I initially started out with VGA mode13h graphics programming - which was already becoming antiquated with the advent of 3D "graphics accelerators" (the precursor to proper programmable Graphics Processing Units), and graphics APIs like OpenGL/Direct3D/Glide. I'd done a few basic things with software rendering, triangle rasterizers, affine texturemapping, etc. before I'd made the jump to OpenGL with a high school senior friend of my older brother's while I was a freshman. We'd tote our PCs to eachother's houses (along with our heavy-ass CRT monitors) and stay up all night eating Doritos and drinking soda, hacking away on code, teaching eachother new things we'd learned how to do just from surfing the web. If two highschool kids could learn how to do graphics programming from the internet of 25 years ago then anyone with an aptitude for math and logic should be able to learn how today now that we have a zillion YouTube tutorials and dozens of webpages and github repos to show you the way. I've since done a bunch of gamedev projects - which I left a comment about just a few days ago somewheres, if I find it I'll edit this post to include it. What I left out of that post though was all the reverse engineering I'd gotten into - using a disassembler to see what other programs were doing, and a hex editor to modify said programs to do what I wanted them to do. This wasn't your modern code injection, I was literally hand-writing CPU x86 assembly opcodes into other programs. I started writing process patchers that would write those modifications into a program only after it was loaded into memory, instead of modifying the original EXE or DLL file itself on the harddrive. I did a lot of random projects over the years, and learned tons in the process. I haven't written any code in any higher-level languages like Python, Java, C#, etc... When I was writing stuff in C it was considered a high-level language. Now it's become considered a "low level" language for some reason, which is just silly to me. It's not the same thing as writing proper assembly, telling the CPU exactly what to do - C entails a compiler that can translate your code into whatever assembly instructions it wants. However, C and C++ does offer control over your program's execution and memory usage that most other languages do not because they try to abstract away the reality that there's an actual physical machine executing your code with transistors switching on and off. Programming is my jam. I would continue exploring the infinite possibilities even if I was rich. I'd do other things too, like get into paramotoring, but writing code and pursuing the unpursued is the entire reason I want to live in the first place. For the last ~7 years I've been developing CAD/CAM software that's meant to be a sort of hybrid between Photoshop and conventional manufacturing-centric CAD/CAM software. It's used for designing and fabricating projects that are cut on a 3-axis CNC router or mill like relief carvings, engravings, inlays, etcetera. After 20 years of working on game engine projects and realizing that Unity/Unreal have basically made the indie game market too saturated for people like me to compete with, I was able to translate my graphics/math/algorithm learnings over to generating CNC toolpaths. All I know is that "modern" languages, by definition, protect you from "hard" programming. They baby you, hold your hand, make your life easy, etcetera. If you want to do real programming, and harness the machine that everything runs on, learn a language like C or C++. Those are the languages that the algorithms *everything* runs on are written in. EDIT: Here's the comment I left on a post over on /r/opengl a few days ago where I go over my graphics programming journey https://www.reddit.com/r/opengl/comments/1cf6v24/result_of_my_first_2_days_of_learning_opengl/l1ramkm/


8483

Wait... Are you Carmack? 😮


invisiblearchives

Safe to say it's not, considering he's talking about learning quakeC and not making quakeC


movi3buff

In undergraduate, final year 1994 - wrote an assembly x86 program to format a FDD within the stipulated 3 hours. It helped that I was prepared but the final product I wrote was good , robust enough to ship with Norton disk utilities ( or at least I think it was). In any case, it was my first hard program, I'd coded in C/assembly before but this is one instance I can recall where the emphasis was on completion and not just experimentation / exploration.


itllbefine21

My good sir, the emphasis is always on completion. Always. Uh uh!!! Allllwaaays. Joking aside, as someone my age, who hasn't done any language learning since middle school(85) and is hopelessly busy, I desperately want to learn C++ and that will most likely turn into one or 2 others. I guess im a Renaissance man, as I have picked up so many various skills and trades, and this is one thing I wish I had stayed in longer. Is there any chance I can resume my learning? I started code camp a few years back but got bored by how easy it was to understand but basically seemed like all memorization. Which means I'd have to stay in it constantly to maintain any skills/fluency. I hate that I can't look at code and at least understand some of what's there. I took Spanish 1 like 3 times in grade school for the easy grade and I can interpret most of what I read or hear but cannot speak much at all. I think this is just due to having a decent vocabulary to pull on. I figure language is language sorta, is this possible and if I applied myself and brute forced my way thru it any guess on how long for minimal mastery? Best case it for me, I'm not asking an easy/knowable question since you don't know me but put yourself back in school bring who you are now, if you went on your own learning path how long would it take you to be functional? Not fluent but read only competent maybe? Thank you.


movi3buff

YES. I'm a little perplexed about your choice of language to start with. C++: it's one of the harder languages to get functional at. Why not pick something that's easier, or more structured? C++ was/is in my opinion a language that invites diverse styles of writing code and would thus be harder for someone that's new to programming. In any case, this is your choice to make. Disclaimer: I never mastered C++ or wrote code professionally, and like you I've merely dabbled in it. Just in case you're open to an easier language, pick a structured one that has more guardrails for new coders and a good set of applications to try out in your context. That aside, as requested, I will put myself in your shoes as best I can. Regarding the memorization aspect, I hear you and the best advice I can offer is to dedicate the necessary time and effort to get through the initial stages as quickly as you can, while the motivation exists. Follow up with a ton of practice that forces you to exercise what you've learned. Toy projects such as writing a tic-tac-toe algo. might seem trivial, but do as many of these as you can. I've tried exercism.org and it does sort of take you down this path of learning + practice in a limited way. It's forever free and a structured way to learn a new language to the point where you're capable of reading code. It's a resource i picked up by lurking on this reddit. Once you've gotten through the exercises there, look for coding toy projects elsewhere too. Practice should help you think in code effortlessly. Once you can think in code, it gets a lot easier to sustain the habit and give your self higher goals that could be more valuable. I think this is because you're writing code with an end goal in mind: maybe it's a C# mod for a game you're extending, or a day-trading algorithm you're creating in pinescript, or maybe a Google script to automate some doc. processing. At this point, knowledge of one language also becomes transferable to other languages. All these benefits help the habit to be self-sustaining. Can you get to this point? In case you stall or become inactive before this stage, don't judge just get back to it when you can. You may have to start at the beginning and it's worth it. Coding is easy to pick up for someone like you (Renaissance Man) and it'll be useful in many ways. The best bit is that it doesn't require a huge material investment. I've always been able to find some dimension at work where coding helps ease my progress and I'm certain it'll pay off for you too.


itllbefine21

Perfect! I only chose c++ as its used for one of the things im interested in. I think i was attempting python in code camp? Or whatever was easiest and mist used at the time. Thanks for the reply and also for the exercism.org and other tips. Much appreciated. My hope was as you said, learn one be halfway fluent in others in time. The little spanish vocab roughly translates to most other romance languages so similar to coding i guess. Unless i missed it, do you have a recommendation on the easiest, best or maybe most useful language to start? Or best foundation that increases adapting to others the most may be the best course? I sorta feel like this skill and then the ability to read electronic schematics and ive got most if not all the skills ill need or have time left to aquire. Getting old sucks. 😂. Just like in a video game, i finally level my character up and 💥 game over! Whatever, i perform better under pressure. Or maybe i only perform when pressured🤔


movi3buff

I'd say take your pick. No need to optimise on usefulness now, as each step completed opens new paths ahead. I'm just going to take a random guess at what paths might be useful for you: Python for its wide application, tons of learning resources and a structured start. C and then C++, if you were to decide that C++ is an end goal. Another alternative to Python, C and then C#, if you think it'd be nice to build desktop applications on Windows courtesy of the huge platform Microsoft provides. It's not that other languages can't be used here, C# mastery just makes it easier to extend your know-how into desktop app development. Similar path and language combinations can be worked out for other application areas such as mobile, web apps and so on...


itllbefine21

Thank you


PouletSixSeven

Start with a hard problem and give yourself 10x the amount of time you think you'll need to complete it.


truNinjaChop

Curiosity. Back in the 90s I was a curious teenager and wanted to learn how to make these kick ass websites that I was seeing. So I thought myself, and JavaScript had just been released so I was like “fuck yeah! Page interaction!!!!!!! (Really it was a page counter)” and I kept following the trail with Perl, php, css, flash/actionscript, servers, hardware, networking, and so forth and so forth. Now. I don’t see a god damn computer (some times my phone too) after 5 pm . . . Not bececause I hate tech, but I know that “bug”.


IUpvoteGME

I started doing hard programming by doing easy programming. Of course, at the time I was a novice, so easy was hard and hard was impossible. Before you can become good at something, you have to suck at it first.


Counter-Business

Joined the robotics team at university. Took on the computer vision part. Got a job as a data engineer.


frankenmint

hmmm, here's what you should try in no particular order: messege queues, websockets, caching dbs, make a simple app that can do networking with another simple app using the websockets and try to bring the latency as close to zero as you can with two networked pieces of software. The problem with following tutorials that show you how to make clones is that they only show you how to replicate the interface, not how to produce the underlying infrastructure in a meaningful and scallable way.


SnooMacarons9618

I found a lot of it is just natural progression. You start with hello world, maybe making a numbers guessing game, add some simple graphics, work up to snake, add some particle effects etc etc. I remember early in my career I had just been doing basic stuff for quite a while, and one day had to walk a co-worker through some code, he was impressed at my use of recursion in a function (I was still really quite young). It never felt like I took a big step, just lots of really quite small ones. Each and every one was an epic victory when I could do it without having to think too hard though.


EtanSivad

I'd strongly recommend the book Wolfenstein and Doom engine books: [https://fabiensanglard.net/gebbdoom/](https://fabiensanglard.net/gebbdoom/) [https://fabiensanglard.net/gebbwolf3d/](https://fabiensanglard.net/gebbwolf3d/) They're fun, if somewhat very technical, reads about how every inch of the engine works from the top to the bottom. It gives a lot of insight into the technical hurdles they ran into and how they overcame them. The thing about Carmack, and most programmers with long skill sheets, as they spent a bunch of time banging their heads against the wall trying to solve an ugly problem. They figure out a solution, and then remember it for later. Literally the only way to grow as programmer is just keep making code and read books to learn more about how others have built things.


gregmcph

Do you have a plan for your chess game? You break down the big task into little ones. A data description of the chess board and pieces, code to test the legality of moves, a socket connection between users with a JSON format for describing moves. Then when you have a working game as bare text, you make elements of graphics, code to rotate and scale the boards, animations, etc. Find libraries where they help... Chop the Big Thing into Little Things.


catopixel

Watch some George Hotz videos and see how he goes from nothing to doing something really hard. Its a good way to understand how those guys make the craziest stuff.


JohnnyOmmm

Care to share an example link?


catopixel

[https://www.youtube.com/@geohotarchive](https://www.youtube.com/@geohotarchive)


maxmax4

when I stopped doing web development


MadridistaMe

In 6th semester of electrical engineering embedded systems class to be precise. First task was to turn on light i did and it grew on me.my batchelor thesis was on control systems for solar power usage in agriculture. Thats the hardest solo project i ever did given age , experience and money.


Potential_Copy27

Did a solar power plant monitoring system (and toolset for internal hardware) pretty much from scratch over about a year and a half some 6-7 years into my programming career. Solar power isn't easy regardless where you're at... LOTS of numbers have to add up and lots of devices need monitoring. Hard? yes, but it was also really fun and gave me a lot of tools and knowledge :-)


arthomas73

My first job... the place wrote logistics software... I had sample code from college where I parsed an csv file. Surprisingly to me... the ceo seemed very impressed. So... if you want to do business apps.. the bar is not that high for entry level positions. If you want to work at video game companies, it's very competitive. I think you're on the right track tho for harder stuff... build something you want to use.


kevinossia

Get a job doing it. And learn C++.


Esseratecades

I read about hard problems and tried to solve them myself. In the early days much of what I did was pretty basic until I found a paper on genetic algorithms and decided that I wanted to write one. Then I wanted to make it smart enough to handle the things that are hard for them. By the time I had solved all of the little problems I needed to solve the overarching challenge everything I had done before felt easy by comparison.  Now a genetic algorithm is the basic project I do whenever I want to learn a new programming language because it's just complicated enough of a problem to require exposure to even the more esoteric parts of most languages.


sneha_singh51

Following


senilemunkee

Tackle one problem at a time. With experience you start to understand which problems come first.


vardonir

How do you run a marathon? One step at a time. I started with the Flutter default template app. I came from a Python background. I stuck features and plugins together as needed. Fast forward ~1 year and now I developed 95% of an app that's used in a small clinical trial with one of the biggest hospitals in the country. And then I took a break. I came back to it and I was like, "oh shit, I made that?"


Wonderful_Boat_9155

Through necessity is usually a good rule. If you need to do something you'll find a way. Projects that are slightly outside your comfort zone help too.


ZealousidealBee8299

I spent a lot of time writing an Octree collision-detection system a long time ago for an OpenGL framework. You can see it here: [https://github.com/glscene/GLScene/blob/70fce0dfb408e29462e8824b65ec19015ed4d646/Source/GLS.Octree.pas#L1195](https://github.com/glscene/GLScene/blob/70fce0dfb408e29462e8824b65ec19015ed4d646/Source/GLS.Octree.pas#L1195)


CodeTinkerer

Most people don't do much more than CRUD programming. So, they never get to "hard" programming. I mean, we only talk about Linus Torvalds and Linux. Not too many others building OS that work in the real world. To put it another way, not everyone can be Einstein or Terry Tao.


SquirtyMcD1rty

You gotta realize guys who are in those positions have hardcore imposter syndrome and they are trying to convince themselves that they are qualified to be judging other programmers. Just keep letting them talk and at the end say you have alot to learn from them. Its not a guaruntee but its the best thing you can do socially.


casualblair

Everything hard I've ever done was about 2 or 4 iterations into things I completely didn't understand and then taking a break for a while (months) and coming back to it having had my subconscious spin on it and me be more experienced.


historic_developer

Get a real job. If you are into hard things, you are going to progress real fast and will become a lead engineer or principal engineer and you will come across some really hard problems.


ILikeToPlayWithDogs

Linux


ElMasterPis

Learn Python, if you want to do the kind of things you mentioned, really Python can help you with this, just use the libraries and if you want to understand how it works, try reading the documentation of the libraries or understanding the code line by line and believe me, you will improve a lot . :-)


jumpmanzero

I recommend doing some TopCoder type problems. They're "artificial", but they'll exercise your algorithm programming muscles - and help you build a base competence that will be useful for whatever you want to do. They're also short and "atomic". Like, making a chess game you're going to be doing a few interesting things, but also a lot of parts that are repetitive or where you're not learning. Doing TopCoder type stuff, you're always focused on the "hard part" for whatever level you're at.


jumpmanzero

The other thing I'll note with TopCoder (or similar sites or tools) is that you will get a bunch of negative feedback about them from established programmers. I think a lot of programmers find these tools threatening. There's problems they can't solve easily, and they don't like that. But it's good to be uncomfortable and do things out of your normal zone. It's good to fail at solving a tough problem, and then have it explained to you by a 13 year old from Poland.


peripateticman2026

Find something interesting -> read the docs/manuals -> get down to working on it -> refactor/improve -> done. It's not fucking rocket science.


Bewaretheicespiders

But it can be rocket science if you work on avionics.


pLeThOrAx

Or gaming


0xDizzy

i think chess is a terrible choice. there are a LOT of rule in chess that have to be programmed in, its not a small task. a real time video call thing like skype would be a more valuable and frankly simpler task in my opinion. Youd learn to work with video files, and audio files, and streaming, websockets, etc. And you can probably find blog posts where someone teaches you at least the high level of what you need to build.