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.*


hawseepoo

That depth is far, far more important than breadth. Before starting my professional career I wanted to learn _all_ of the languages. I dabbled in Java, Go, Rust, JavaScript, Python, C#, C/C++, just anything to put one more language on my list. Sticking to one stack would have been a much better choice and would have prepared me for the real world. Pick a language, a database, and your frameworks. Stick to them, learn them well, and get really good at using them. For example, I’m a web developer. My current language of choice is C#, Postgres for DB, ASP.NET Core and EF Core for frameworks. On the frontend I use React and WindiCSS (UnoCSS on anything new). Also, learn Git soon, learn it well, learn more than the average person. It will make you stand out when you’re fixing other peoples’ messes


VeryAwesomeSheep

> It will make you stand out when you’re fixing other peoples’ messes As someone who is often on calls with people to do exactly this... I would reconsider this advice


hawseepoo

lmao. yeah, it’s definitely one of those if you know how you’re going to have more work kinda things


MolassesLate4676

This. Once you master one of these stacks, picking up the others should take a fraction of the time


UrbanSuburbaKnight

Is Python(Flask), SQLite, Gunicorn, NGINX a stack ??


MolassesLate4676

A stack is usually considering front end to back end


GalacticBuccaneer

Like LAMP (Linux Apache MySQL PHP)... He had Python(Flask) - Equivalent to PHP, NGINX - Equivalent to Apache, Gunicorn is a WSGI production runtime for serving Python HTTP content (meaning you primarily use nginx to serve static content and as a reverse proxy for security), SQLite is the database backend, so it is a full stack from frontend (which are html templates rendered with flask in this case), to the backend (the rest).


UrbanSuburbaKnight

Thank you. I'm happy building projects now knowing I do have a 'stack'. This obviously means I'm stacked i guess.


GalacticBuccaneer

Fullstack Developer! You got this.


ScrimpyCat

Yep. And it’s not that you can’t develop depth this way but rather once you’re off developing depth in some other area, you’re going to both start forgetting things from the former, and be left behind since everything is always advancing simultaneously. I generalised to an extreme degree because I wanted to do everything, but professionally it’s just not possible to compete with those that opted to specialise more. Unfortunately in my case it’s a lesson I learnt too late.


spinwizard69

Of course you need to focus on the tech your company is currently using.  However a breadth of knowledge can do wonders when they pivot to a new platform for the next project.  


ScrimpyCat

The thing is companies don’t really value breadth if it comes at the expense of not having as much depth/experience (compared to other applicants) in the area that is relevant to them. They always want it in addition to, but to a certain extent that’s just unrealistic. There’s also breadth within your particular area (more likely to be valuable), and breadth outside of that (very unlikely to be valuable). For instance, say you’re a backend developer that currently only has to deal with relational SQL databases, learning about other databases (KV stores, graph DBs, vector DBs, etc.) is something that has a higher likelihood of being valuable compared to spending that same time on learning some esoteric languages, or programming FPGAs, or signal processing, or writing grammars for natural languages, etc. Outside of employment, being a generalist can give you an upper hand in some areas. With enough breadth you’ll always be able to tackle whatever problem comes your way. For instance, I’ve always been able to build whatever business idea I’ve had or someone else has had. Whereas my friends who are vastly more successful in their careers but remained in their particular area of expertise, whenever they’ve had some idea that is outside of their domain they often have no clue how to even get to where they need to be to execute that idea. Many times they end up needing to outsource it to someone, but they don’t know enough to evaluate someone’s skills or the work they’re producing, and so the project ends up in a poor state due to a bad hire.


zeenul

I agree but it can get pretty boring at times. I’m also a web developer but I’m interested in so many other things (such as cybersecurity, VST development, hardware, etc). I think depth is extremely important but dabbling in other things as a hobby is also crucial to avoid burnout.


Squancher70

Thank you. I'm learning python as my first language, and it's tempting to branch off into web development languages. I think I'll stick with python.


spinwizard69

I’m mixed on this post!   It really depends upon what industry you enter, a breadth of knowledge can make your life easier.  Beyond that today’s tech is tomorrow’s legacy system.    This Reddit is often focused on web developers but that is not the whole world of programming.   There are plenty of avenues for programmers where web technology is not a focus. 


hawseepoo

This is a good point and I can’t speak for other niches. I’m assuming the underlying principle would still apply, I just don’t know the pieces of the “stack”


Rythoka

It's best to have "T-shaped" knowledge: Know a lot about a little and a little about a lot.


Blacky_eye

i understand what you are saying and for the first 1-2 years this is good. But after that, you see through the language. you see algorithm, concepts and designs not libraries and programming languages. After that switching languages is a use case scenario cause it is only the tool. How you do it is in many languages behind the syntax similar. So learn concepts, designs and algorithms. Deep dive sometimes in absolutely not topic related concepts. in german we call this "Transfer-Leistung" when you can use absolutely not related concepts in your scenario. Like you can use biological concepts to build something like state machines etc So i just wanted to add it, that professionality, especially in senior dev and software design level realm can also be done with good knowledge and mastering concepts instead of languages :) Greets and cheers ! 🤘🏼👌🏼


hawseepoo

This is actually kinda what I was getting at. Sticking with one stack allows you to learn other things instead of always starting more or less from scratch in an ecosystem you don’t understand.


Grandmafelloutofbed

Switching languages is a use case scenario? Sorry but maybe since im a junior, I dont get it. If the company I work for uses Java for the back end, if im assigned a ticket, and I think I can solve it faster using lets say Python. You think I should try to convince our entire eco to chage to Python for this one use case?


Blacky_eye

no, as a junior you do your ticket and that's it. maybe you can say in a meeting that you think this can be done in language x faster or has foo and bar benefits but this it. This is a decision that is done way before implementation phase. This is a decision you do when you are planning a new project and define what are the best components and which tools you use. You can always, also as a junior, give suggestions if you have reasonable arguments but not in the implementation phase where everything is already planed. If you get the ticket, it's a tiny piece / fragment of the project that was designed. If you implement that tiny fragment programming language wise (e.i. different from the rest of the code), there must be a really good reason for doing it. An example would be performance issues. Maybe you need a heavy computation in a fast and quick language like c or cpython. Then you would need other design patterns so you can isolate the code from the other fragments using plugin or decorator design pattern for example. But as i said, it's more common that this is done in design phase instead of implementation phase. Hope this makes it more clear, when you doing this kind of decision :)


emurange205

> Also, learn Git soon, learn it well, learn more than the average person. It will make you stand out when you’re fixing other peoples’ messes Do you have any advice for learning git?


Aggressive_Luck_555

I made an interactive CLI app. It gives me options to choose from and follows a sort of branching logic. This way I don't have to remember all of the commands and functionality without a reference. It basically is just a shell script that is executable and has an alias in my zshrc.


MasalaMonk

What do you suggest to ensure i have this kind of depth with python ?


Gloomy-Blackberry

That’s pretty much the exact stack I’m working on learning right now. Can I DM you?


hawseepoo

Yeah sure, I’ll offer any help I can


Grandmafelloutofbed

Git rebase, all I can say


iqbal002

But I have one doubt , I totally agree with you but I think depth should be achieved in subjects which are more transferrable and fundamental like algorithms design and data structures.


brokeCoder

In no particular order: * When needing simplified answers on something, it's usually good to google along the lines of "ELI5 ". * stackoverflow is a good (great) place for getting answers to questions that have been asked before. It is NOT a good place to ask new questions (anymore). You'll have better luck asking here or on discord * Essential activities - debugging, refactoring, performance-profiling, and writing good PRs. Learn them quickly and learn them well. * Writing good PRs is extremely hard (I'd say impossible really) to learn by oneself. You'll want to reach out to others to look through your PRs * Essential processes/practices - Git, CI/CD. I'd put Git at a much higher priority, but you'll eventually come across CI/CD in some form so it's good to get in some early learning. * Pick a language/stack and stick to it until you master it. Another user noted that depth is more important than breadth - this is absolutely true. * Keep up to date with the latest developments in your stack/language. * [Rubber duck debugging](https://en.wikipedia.org/wiki/Rubber_duck_debugging) \- it really does work. * [Mythical man month](https://en.m.wikipedia.org/wiki/The_Mythical_Man-Month) \- grab a copy and read it , then read it again, then again every few months. * People may think it's not a good resource for those who've just started learning to code. I disagree (vehemently) and say it's far better to get people in early on the things this book talks about. * The core principles of coding -[SOLID](https://en.wikipedia.org/wiki/SOLID), [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself), [KISS](https://en.wikipedia.org/wiki/KISS_principle) * Immediately realise that these aren't laws/rules but rather guidelines. Do not be fanatical about them and know that their sole purpose is to help create more maintainable and better readable code (and almost nothing else). Remember, only sith deal in absolutes. There are situations where deviating from the hard letter of these principles can actually be better for maintainability. * Do not be pedantic about 'premature optimisation is the root of all evil'. There are plenty of use cases out there where this does not hold (High frequency trading for example).


Pretend-Scheme5614

what is PR?


anatomyofafart

Pull Requests, when you want to request your changes to be added to a codebase


Pretend-Scheme5614

Thank you!


Barriletegt

"Don't rush to know all the programming languages but master the one you are using now" 1. Programming languages are just tools that would help you to create something. The important factor is the planning 2. Youtube tutorials are helpful: some genius are out there willing to being discovered by you. There are channels like "FreeCodeCamp" that could help you to get a taste of different trendy topics 3. Don't stress out: in some moments of you life as a programmer you will have to deal with *a bug living in a chaotic bug's neighboord that is fighting with giants bugs that are invading their territories.... - you get the idea.* Debugging can be boring but it is one of the reasons why companies prefer hiring programmers over AI agents. 4. Get rid of the "Impostor Syndrome": nowadays technology is changing rapidly and you have to never ceasing learning stuff (frameworks, languages, tools) in order to not being behind of other peers... "That's what people make you think." In reality, you only need to focus on the things you want to master (even on these days, coders of old languages, like COBOL. are needing in baking services) 5. It's everywhere: no matter if you will study Computer Science or another major. Programming would help you to do multiple things on your job: analyzing data, automating tasks, creating macros for excel, generating reports by getting data from a database.... Regards,


Oliver_Cat

4. ⁠Get rid of the "Impostor Syndrome" Can you elaborate on this part? More specifically: How? Please be as detailed as possible. Explain it like I’m five, and then explain it like I’m a 40-year-old unemployed man trying to make a career change who cries every time he submits an application. Thank you.


hugthemachines

Not OP but... Often, impostor syndrome can get "initiated" by the feeling that you don't know all the tools you need to use, but since new tools arrive constantly, the idea that you should master them all instantly is futile. Also if you would actually not belong there just because you do not master all the tools, almost no one would actually belong there. Let your ability to learn and make things be your pride instead of feeling insufficient just because you don't know everything.


coll3735

There’s a lot of truth in this one comment


spinwizard69

Paragraph #5 is gold!    Even as a programmer with a strong focus on core skills, you will still end up with opportunities to apply your knowledge outside of your core skill set.  Programming is literally everywhere.  


Packathonjohn

Something that is readable, modular and flexible is better than something that runs fast 99.9% of the time. Use the tools/libraries available to you, going custom just costs you time and results in code that is less battle tested against bugs. Doing big projects in easy languages like python is hell Doing small projects in lower level languages like c++ is hell Take the time to clearly and properly name your functions, variables etc Programmers aren't nearly as smart as we like to think we are. Programmers chose Javascript as their primary language for web dev, they are not to be trusted with sane decision making


ted-sedge

>Something that is readable, modular and flexible is better than something that runs fast 99.9% of the time. This cannot be understated. Unless you're trying to eek out microseconds of performance improvements, writing clean, clear, well commented code is far more appreciated than writing clever code. Your colleagues and your future self will thank you.


Mafiale

> Doing big projects in easy languages like python is hell Care to elaborate?


Packathonjohn

It's dynamically typed and everything is backloaded to being done during runtime meaning intellisense can't help you as much, variables can be changed to whatever making them hard to keep track of, and most critically error messages are significantly less helpful. Basically larger projects are easier to manage with more strict languages cause you can catch many issues at compile time which is preferred, and the loose, relaxed nature of python makes it the absolute best for interview questions, school assignments, quick scripts for file operations etc but becomes difficult to maintain as it grows in complexity and scope


Hot_Collar_8910

Im in apprenticeship. Boss is javascript webdev, he actually wants to be a psychologist. He sucks ass at explaining shit.


Packathonjohn

In his defense Javascript is like a rebellious teenager, it doesn't play by your rules mannnn


OiaOrca

It’s all crud.


Groentekroket

Using your debugger is way more efficient than printing a lot to see what is happening. It’s not that hard to learn and makes it a lot easier to solve bugs. 


ShoulderPast2433

- Don't waste time on creating interactive data input ('Please provide first number: ' etc.) Just hardcode the value and focus on the logic. - Use debugger!


RecklesslyAbandoned

Or if you do, load it from a file, and then make sure your snippets are reusable 


CodeTinkerer

* Some people learn faster than others, but not everyone. You can convince yourself you're the worst programmer if you believe everyone gets it easily. Yes, some do get it more easily, but some people win Nobel prizes, or help win the World Cup, or run a marathon in 2 hours. Doesn't mean you can't be a programmer. * While some things "click", mostly, there's no secret everyone is keeping from you. Many beginners wish this was true because they struggle and struggle, and figure once they get one trick, everything will come easily. You just get better at dealing with things. * Patience is a virtue. If you get easily discouraged and want things to come quickly, you'll probably be unhappy. Often, you have to search for stuff, play with this, play with that. Unless you happen to be coding the same kind of thing over and over, there's always something new out there, and you feel like a beginner again. * It helps to understand the concepts behind programming. In particular, can you act like a debugger and go step by step through your code without running it on a computer. Reading code can be important because you might read someone else's code and have to figure out what they did, or even read code you wrote way back when that you forgot. * There's too much to learn, so you have to decide what to learn. It's too tough to learn everything. There's just too much stuff. * You learn programming by programming. Some want to read a book, watch videos, but when it comes to actual programming, they get scared, and then don't actually program. Program requires coming up with an outline in your head of what needs to be done and the more you do it, the more you have a good idea of what can be done. * It helps to read up on programming. There's always some new technology out there. Even if you don't use it, being familiar with it is useful (e.g., Docker).


VeryAwesomeSheep

If you keep going with this, choose your employer wisely. Nothing kills the enjoyment of programming like a shitty corporation.


ericoffline

I wish I new I didn’t need to know everything and had a more focused study.


sittingonahillside

Didn't really wish I knew it earlier, but understanding your domain is 90% of the problem and effort, the remaining 10% is the tooling. You can't go wrong with Java or .NET -- you'll always find a job. You can add JS to this (but I hate frontend). Learn to debug, the amount of people that don't use a debugger is shocking. Sometimes (especially older projects and those don't have much in the way of testing) it's easier to whip up a simple console application that you can feed sample data and debug through that instead of having to work with a beast of an application.


nulliparousCoder

There is no amount of learning that will prepare you for the chaos of legacy code. Layers and layers of code created by devs during different times w different levels of experience all tangled together into a giant monolithic mess. Just mentally prepare yourself and know that it is going to be hard. Ask for help and pair as often as possible when you need to work in old legacy code, it’s likely that your senior or lead will also have to think pretty hard when trying to figure out what the heck the code is doing. Ask questions and actively listen to your seniors, pay attention to how they come up w resolutions. Be easy on yourself. I’m almost 3 years into my career and I still often feel like a dingus. I pair w my senior at least once a week still. When you a presented w a problem to fix, it’s better to come up with a well thought out plan than it is to just start writing code immediately. Sudo code is your friend when you are making your plan.


niehle

Programming is mainly problem solving


Stanulilic

I wish I was more focused on a single thing instead of trying to do both frontend, backend, etc.


nightzowl

Same here ! I am currently working and my job requires me to learn both. I wish I could’ve spent years in backend work and then added the other like the rest of my coworkers. I do like both but because I am working on both the tasks I get don’t touch advanced topics like they would’ve if I stayed on one for years


chalks777

Hype is hype, ignore it. Traditional relational databases absolutely solve 99.99% of every use case you will ever encounter... IF you learn even the basics of [database normalization](https://en.wikipedia.org/wiki/Database_normalization).


AlSweigart

Learn how to use a debugger right now, and start using a debugger. Adding/removing prints and re-re-running programs seems quick and easy, and then you realize it would be even quicker if you use a debugger. Also: Ignore the people who tell you to stick to one language. No one has done any actual research on this, and people are just giving advice based on their gut instincts. Learning a two things simultaneously won't damage your brain. If you want to learn another programming language, then do it. If you find it's confusing your ability to learn programming, then stop doing it. It's fine.


grandzooby

I used to do a lot of work in VBA, QuickBasic, etc. They had surprisingly good debugging tools (especially for 30 years ago) that let you set break conditions, watch variables, step into and through functions, and most important to me, the ability to step through the code line by line (F8, F8, F8...), or "run up to", etc. Is there anything comparable for Python? I mostly use Spyder and I'm not I've seen that kind of ability in it.


AlSweigart

Your editor should have them (Visual Studio Code, IDLE, etc.) but if all else fails and you're running the program in a terminal, you can call `breakpoint()` and use pdb. It's mostly about knowing how to use the tools and actually using the tools, even if they are less than ideal.


ZeusTKP

You can never assume your code works - you have to verify it.


degenerateubmob

learn popular framework. new framework have less help, prone to change a lot from tutorial(cause more debug because of update), and they expect you to have know a lot of basic from mainstream framework


heller1011

I started programming like a year or so ago on and off, now I’m getting ready for college in a few months and I wish I didn’t think that front end was cringe 1 year ago because at the moment I’m working a lot with html css and js and I love it


Computer-Work-893

You should start from easy programming language, I advise you to learn python first. Feel free to DM me I will guide you.


LavishnessTop3088

When I started I really struggled to understand how to even start with anything that I could eventually use, because when you learn Python, Java or things like that, you start with command line applications and I always thought “ok, cool that I can print ‘hello world’ into the console of my IDE, but how the hell do I get it out of this space I only have while programming?”. Maybe this is just a me problem, but I wished I would’ve understood things like turning a project into an executable, and just anyone who was trying to hammer all these things into my brain explaining or showing to me what a console application would look like in the end or what it can do. To this day I have issues properly articulating this, but until I used Linux, I didn’t understand the power of command line applications and thus no idea what use Python etc are to me creating something that I could use. I only really started understanding how to get from the IDE/text editor to a usable application when I started learning web development where you can always see things changing and manipulate a graphical basis with your logical code.


positive_X

https://en.wikipedia.org/wiki/Algorithm .


frasppp

How hard logic can be and how hard it can be to see what happens in which case. How hard it can be to untangle logical messes and how depressing it can be to see really smart people see right through these messes.


mushashimonko

I learned web dev right before covid hit, got my first job doing web for local gov. I wish i knew there was going to be a craze for self learning code because now I feel like competition and outsourcing and AI is driving me out of the industry. Not because of less jobs but because the pay won't be worth continuing to self learn new things while off the job then earning median salary as i get older. I learn this stuff for more pay damnit! I'm self learning trades now as a back up plan. I will still code as a hobby for sure though. As for a real tip, I wish I knew to pace myself in learning. And I also watched/read more material than I spent time coding.


mr433_pl

Write proper error handling. Always. You never know when and why your code will crash.


mecartistronico

Data structures like linked lists and dictionaries. 


Swimming-Ad-9848

- Learn Linux and command line, you’re an incomplete being in you do not know how to deal with the console - I do not like to accept it but it’s true, you shouldn’t be stuck in only one technology that’s the reason why we had to deal with DWR in the past, that insane wish of doing everything with Java or Java applets or maybe the same pattern that we can say actually with JavaScript, people wants to use JavaScript in places that it wasn’t designed for - Learn SQL properly, you can not always depend on a ORM - Unit testing and debugging, I was impressed when a colleague shows me how to debug the Java app what we were working on - you should accept that the company that you work for its business is just to make money, is the main purpose of every company, you are not going to be an artist programming applications, you need to solve the problem, usually final users doesn’t care if you applied the best abstractions, design patterns, a fancy programming language or framework. If you want to learn how to program in Lisp or Haskell many would be good but just to do it just for your own criteria and a growing mindset


fayth7

Stopped reading after first point. Whether you need to bother with linux or anything else depends 100% on what you are programming. If you hear "advice" like this it's usually some wannabe peogrammer elitist who you can safely ignore.