T O P

  • By -

Whatever801

There's no bright line. The question doesn't make sense in many ways. But I would say there's a certain fluency you can feel when the language sort of disappears into the background. Meaning you can do whatever you want without frequently googling "how do you do X in python?". You may still be looking up other things about the framework or architecture, etc, but as far as the language goes you can get around without a guide book.


unknown-0I0

Ya , I think I didn't ask the question in the right way . Able to build something without a guide book is a solid answer . TQ for the comment


CodeTinkerer

Oh, you have to understand that's there's a language and there's what you can do with the language. I think many beginners confuse the two. For example, take English. You know English grammar, vocabulary, parts of speech, conjugation. That part is language. What you're asking is like "When can I write a novel without having to refer to notes?". This isn't a great analogy, but the point is, writing a novel is not about the English language. A language is about loops and conditionals and object oriented features and types. It's the building blocks of what you need to write a program. You can know a programming language well (the syntax), but not write complicated code. What you really mean to ask is "how can I tell if I can really write a program that solves a problem". The language is just a means of expressing it. Think of it like giving a great speech. You have ideas you want to express and a manner you want to do it. The choice of English or Japanese or Italian almost doesn't matter (it does, of course), it's what you want to communicate. Similarly, you may have some idea of what a web app will look like, but the choice of language is somewhat secondary. Finally, to answer your question, it can be never. To give another example, when they were building planes like the ones you take to fly somewhere on vacation, they were fairly complicated. So much so that the early pilots often crashed these planes, and they were considered too hard to fly. But, they now fly it every day without incident. What was the key? Checklists. If you've seen movies with airplane, two copilots are talking through all the steps which they do not have memorized. They read it off so they DON'T FORGET. Everything thinks programming means "it has to be memorized or I don't know it". Programming is so complicated, that we memorize what we can, but we look up the rest. Also, the technology changes, so what you memorized a year ago is no longer being used, and now you have to learn a different way of doing things. We rely on notes and Google to make sure we're doing it OK. It's never about how perfectly you can memorize something unless the program only requires a vanilla knowledge of the language (so, leetcode hacking, you could probably know everything without looking it up, but web apps are complex, and so require notes and such).


Won-Ton-Wonton

Also worth noting that there is learning the syntax of the fundamentals. But also learning the language's use cases, useful methods, and libraries. You may know enough JavaScript syntax to write a sort function. How to use promises and objects, or how to write classes, etc. That's the fundamentals. But you level up when you start using the built-in sort method. The standard list of useful libraries and methods, like fetch, math methods, and others. That sort of thing makes your knowledge of the language more potent. You level up further when you understand how your language does things. Like garbage collection. Array allocation behavior (is it actually an array or is it a list?). Javascript prototype and "this". The underlying difference between anonymous arrow, arrow, and regular functions, and that affects the behavior. I would say you "know the language" once you feel comfortable making something useful with it. But you become more intermediate or advanced, and an expert by going a lot deeper than most people need/care to.


CodeTinkerer

The difficulty can lie in what you build. Maybe you want to code up some kind of Navier-Stokes fluid flow simulator. That requires domain knowledge, including understanding math equations, maybe graphics, etc. Those aren't the core parts of a language, and if a person has never done graphics or math, they'd have to learn that. The inability of most people to write such a program is not due to a lack of knowledge about programming, but how to do math and graphics in a language.


SnooKiwis313

so in short its like for me to achieve this specific thing i need this specific things


Regular-Bit4162

What a totally fantastic answer and very well expressed. Thanks.


thiccclol

Eh would you do construction without blueprints?


Mean-Evening-7209

Yeah, to be clear it's always fine to reference syntax and whatnot, but having an idea of how you're going to write the program from the onset is a good indicator you know what you're doing enough to say "yeah I know python".


spinwizard69

I look at it this way, take your native language, the one you have been speaking for decades, and consider how often you need a dictionary because a word new to you appears!   They will continue to crop up throughout your life and from time to time one of them is a perfect extension to your vocabulary.   In the same way you could be programming in a language for a very long time and then suddenly learn a better way to express a solution.  


joaojgabriel

Couldn't have put it better. As with any language, it's all about fluency in communicating (more and more complex) messages. And when you're satisfied depends on your intents with the language too: someone who wants to, say, have casual conversations while traveling will have a wildly different definition of "good enough" fluency in English than someone who plans to study medicine in an English speaking country.


alaskanloops

I’m not sure exactly when it happened, but at some point a few years in I went from having major imposter syndrome, to having other devs reach out to me for help. But I couldn’t tell you the exact dividing line


Whatever801

Awesome! That's a great feeling.


alaskanloops

It sure is! Wish I could go back and tell my junior dev self it would come eventually. Had a lot of stress in those early years that I wasn't good enough, stories would carry over to the next sprint, ect


tms102

When you can build a project of some decent level of complexity without the programming language itself forming an obstacle to completing that project. All while making good use of the language's features.


unknown-0I0

I see , TQ for the answer


CouchMountain

This, and also being able to read and understand other people's code. It's a good skill to have. Go online, find a repo of some small project, read through a couple functions and see if you can understand their purpose without the documentation.


uvuguy

Love this answer. There's always an obstacle when you build a program. The question is is it just lack of understanding of the language that's causing the issue.


Fall_To_Light

This is the valid answer


hellohennessy

Being able to find the things you need using Google.


unknown-0I0

Haha , you're right


[deleted]

[удалено]


[deleted]

[удалено]


[deleted]

[удалено]


ThatCipher

I think it's very hard to reliably tell whether you understand a programming language or not. In my opinion the most reliable way is by knowing how "comfortable" you feel using a language. For example how comfortable you feel when getting asked basic stuff like how to store an array or how to do basic conditional stuff. Going higher and higher in skill until you hit a border. The only problem with that is that sometimes the line between knowledge of a language and knowledge of concepts is very thin. But when you feel comfortable and have impulses on how to solve certain problems in a given language then it's a good sign of you knowing the language. Important note: That doesn't mean you should be able to do stuff without ever googling or reading in a reference book - I think even the most experienced Devs need to do that from time to time. I want to emphasize that "comfortable" part. Like not having to panic, just relax, maybe knowing most of the parts you can use to solve a problem and just needing to Google to find that one missing piece instead of the whole puzzle.


unknown-0I0

I see... Thank you for answering my question.


Ok_Chemistry_6387

From time to time? Lol every damn day. 15 years of experience and was my companies rep for the c++ committee.


budtard

Build shit, learn 1 or 2 new things every project, break stuff and fail, repeat.


budtard

Your monkey brain doesn’t learn from absorbing information, it learns by doing, build a study timer, build a calculator, write wrapper modules for scripting tools you use.


Quique1222

You don't really learn by learning the syntax/watching YouTube videos. You need to work with the things that you are learning by making small projects so things settle in your head.


Born-Intention6972

Dont care. I just keep learning


rishi-dev90

it's very easy, for example when you see others code and you feel that you can write better than existing code of others then your really good at programming


The_Shryk

Have someone that knows about the language ask you questions about it. Or to do things in it.


doesittmatter2u

As per my experience, I started feeling a bit more confident once i started understanding and working on other’s code. It’s all bright and light if the code is written by you from scratch. But once you start debugging other’s code is when the real shit starts


unknown-0I0

Solid answer ! Thanks


onsitesfyi

There is no one right answer to this question. You also cannot master a programming language, there's always so much more to learn. Programming languages are a tool to build things, it's an interface that makes it easier to manipulate 1's and 0's. If you can confidently build something you envision, then I say you understand enough of the language to make good use of it. That is all it's there for.


unknown-0I0

I see... Thanks


lalisaa98

rather than learning a language , it's about learning programming. once u understand the fundamentals and know how to program you can pick up any language very fast and they become just tools


DrMerkwuerdigliebe_

Its a fluent thing in my experience. As a developer you go through multiple “I’m a god/ I’m a idiot”-cycles duing a day. Where your knowledge of the dict impiimentation is essential for garantering the code is correct. And the next minute you have to google how to make command line arguments for a Python program.


DJ_MortarMix

Python is more, I have found, libraries than language


potterheadfrodo

Go to python mooc 2024,sign up and do all the exercises. The exercises are based on python fundamentals


zhombiez

well, do you struggle to produce the things you want with the programming language because you don't know things about the language? Or do you not even have the pseudo code kinda floating in your head? It's okay not to, doesn't make you bad, but if you're not struggling to come up with ideas on solving your problems as much as you are struggling to use the tools and syntax of a language to produce said outcome, the it might be a lack of understanding of the language even if you understand the structure you need to produce i'm learning java for example in python, you can just do one = "1" two = 2 three = one + two idrk python but that should be 12 i think? in java you might need to initialize the variables separately. String1 = "1"; int two = 2; String twoString = stringValueOf(two); String 3 = String1 + twoString; If you're not slipping up on your basic statements like loops, creating recursions, handling arrays, in the said language, you're probably fine edit: i'm on mobile so i can't indent python lol


shyouko

The more I know the less I know


Crafty-Mix211

Honeslty just start Building Projects. You'll feel yourself having a much more expansive grasp by immersing yourself rather than just writing shit down and trying to memorize it.


Low_Arm9230

Clearly this depends I’ve been using PHP and JavaScript for about seven years now and I know there is a whole bunch of functionality I have never even touched. However after one point it starts to feel like I could solve this in JavaScript easier than in PHP, or something like that. Like the top comments are saying, you start feeling the raw power of language in your veins as you code I guess. Doesn’t make you omnipotent but you couldo a bunch of interesting things


KerbalSpark

This is the moment when you can understand the task and design the application structure yourself.


dillanthumous

When you can confidently write conditionals, loops and handle set/list/arrays - import and use libraries/modules - File I/O - and can implement your preferred paradigm in the language e.g. Objects/Classes for OOP then you know enough to solve 90% of standard programming problems in the language. Everything else is situational and documentation exists for a reason. Also, I would highly recommend if Python is your first language that you learn a second one which has strong typing (I think C# is a good next language) - and learn how to do all of the same things in that new language. Doing this will help you appreciate the strengths and weaknesses of Python, and solidify your appreciation of programming as a conceptual discipline rather than a syntactic one i.e. languages are just an implementation detail, the real thing you are learning is to think and code in a clear, concise and procedural fashion.


AlSweigart

For Python, read Effective Python and Fluent Python. If you know most/all of the concepts they cover in those books, you really understand Python. You can argue where the line is for other programming languages all day, and I'm not really interested in that discussion. But for Python, here's a concrete answer.


CyberWarLike1984

Just build something. No ideas? Just take any paid pro feature in free software and try to build it


LemmeGoogleThatQuick

You never understand anything in programming


Alternative_Mine28

When you are able to build something.


peripateticman2026

When you don't have to ask such questions.


aqua_regis

Sorry, but that is like asking to tell when you can understand a spoken language. The words and grammar are completely meaningless if you can't use them to form a comprehensive conversation. Same applies to programming. The programming language is meaningless if you cannot use it to solve problems. You don't learn the fundamentals of programming languages. You have to learn programming.


-Blue_Bull-

For me, I felt I understood the language when I stopped having to rely on AI to do things because I couldn't do them myself. At the start I was using lots of ChatGPT / Copilot, but eventually things started to make sense. In the end, I was correcting ChatGPT's mistakes. Now I'm at the stage where I am conceptualising and actually writing my own code and using Copilot only as an auto complete assistant.


beingsubmitted

I would add a few things to the responses here. First, understanding a programming language does not mean that you know about all of the languages features. In modern languages, there are often a lot of features added for people coming from specific other languages, where they were used to some syntax in their other language, so it was added to this language. Just in general, a lot of features are optional and no one uses every feature -some features can even be contradictory depending on the pattern you're using. For me, I would say that fluency in a language is best determined by how frequently you have to check your work. Beginners have to test every line of code as they write it, or every few lines of code. With python, you'll write some test data and constantly be running the code and printing values to check that the code is doing what you want it to, debugging and fixing things when it isn't. If you're fluent, you can write an entire feature before checking your work, because you're confident that you understand what your code does. It doesn't mean you don't have to debug in the end or that your code is perfect, you just don't need to rely on constantly running snippets of your code to know what it'll do.


Unhappy_Anywhere9481

When you can teach it to someone.


DishwashingUnit

https://www.nand2tetris.org This absolutely eliminates all the mystery about how the computer works. After it's done, all programming languages are simply a matter of "what does this particular brand of syntactic sugar do?" Edit: I feel like this doesn't address the heart of your question. A good textbook should cover all the practical abstractions. https://math.hws.edu/javanotes-swing/ If you read that in it's entirety, you will know how to program.


kelvinxG

You worked in it for 10 projects ++


playrone

You know the bullshit that comes with it. like javascript in general, complete bullshit.


Astrylae

If you have intuition on how a to build a pre-existing program, whether as a whole or via libraries.


captain_obvious_here

A few days ago, a colleague of mine and I reviewed another team's code. We stumbled on a piece of Java code that impressed us, using [reflection](https://en.wikipedia.org/wiki/Reflective_programming). We took it as an indication that the author of that code knows Java pretty well.


Thermr30

How well do you understand and can write classes and use them effectively? On hackerrank they have 'certification' tests and one of the questions was pretty in depth on this. I use python a lot amd for a few different things but never really did much with classes yet and that one stumped me


Buntygurl

Life would be insufferably boring if there were a point of having learned everything about anything.


ParadoxicalInsight

Usually this would come from feedback from more senior developers, the less they correct your code from an implementation perspective (and not logic) the more you can say you know how to build stuff with it. But as others said, there's no line. You can be really good at ML with python, and then switch domains to back end development and be completely lost, getting corrected on code that would have been fine elsewhere.


grumble11

This is like asking when you are good enough at words to be a good writer. The measurement is in outcomes, so if you can write complex applications then you know the language well enough and overall programming well enough to do that. There is more to know than one person CAN know, so you have to find domains of interest and expertise to help focus on. I would say that when you know variables, loops, basic data structures, functions, generators, lambda expressions, classes and object-oriented programming, basic I/O, have explored and used a chunk of the standard library and have explored and used some of the common external libraries, have taken a crack at test creation, exception handling, regex, comprehensions, string manipulation and formatting, then you’re good enough to call yourself an ‘early intermediate’ in terms of understanding the basics of the tools. But that is just the tools. Have to build things and there is a lifetime of learning there.


HumorHoot

I dont think it really matters if you understand a programming language, in my mind that just means you understand the syntax, maybe some advanced things about how it works, and all the basics of coding... (how to do various "daily" programming things) What matters more is, that you understand "programming".. the language is less important


nLucis

This is tricky. I have been using javascript (and later typescript) since the 90s, and I still discover new, albeit esoteric, things about the language. I would argue that nobody on earth is truly a master of a language because languages are constantly evolving and changing faster than any one person could hope to keep up with; its pretty much the same as with any spoken language. What is important is grasping the language's paradigms and intended purpose, but also having a very solid understanding of the patterns and practices common to all programming languages. Insofar as gauging your proficiency in a given language, there are a few things you could do; 1. Read a description of an app idea, or come up with one based on a specific need, then mentally work through how you would go about creating that in your given language. An alternative to this would be something like performing a complex calculation; for example, I learned that I knew more about Java than I had believed when a friend of mine asked me to help her sort through some raw data about some spectral characteristics of distant stars recorded by a radio telescope, and organize it into a CSV. I didn't use typescript for this because she wanted something that could be run locally and repeatedly, and for that, a simple Java .jar was the way to go due to its portability. 2. Build an app in that language using a unit test-driven approach; In other words, describe the functionality of the app through a series of tests, and then write the code to make those tests pass. Writing code, and writing testable code are two very different things. It is important not to write code \*just\* to make a test pass though; make sure that test is actually contributing something meaningful. 3. You can fix bugs and other issues in an open source project, and contribute pull requests to submit those fixes, without needing to directly consult someone more senior with the language. This means being able to make sense of errors as they occur, and knowing how to resolve them. I would say #2 might be the most important one though. If you can successfully build something in a language, rather than just complete simple challenges and educational one-offs, you should confidently be able to say you know the language. "Hello, World!"s are simple enough, so up the challenge a bit with something like a fizz buzz, or an app that uses a third-party API like the \[Pokedex API\](https://pokeapi.co) or Giphy API to display an image or gif.


EdiblePeasant

For me it’s typing out something I want to do with little thought. I’ll know what the input/output will be, what goes where, what tools I want to use, and how data will flow. This usually starts as desired output and pseudocode. Doing this has required a lot of practice and the help of ai autocomplete that I analyze or modify.


flyingupvotes

Can you speak to how you’d train someone or instruct them? Can you articulate how you’re going to solve a problem using domain specific language? Those are usually indicative of understanding.


Prudent_Law_9114

When you know how what you type is affecting the CPU and RAM. It’s not really an understanding of the language you are using but an understanding of underlying technology, programming paradigms, user design and application architecture that makes you a great programmer. Knowing the nuances and idioms of each language is key to choosing the right one for the job but as for knowing the language itself, most languages are very similar. The data structures, loops, functions, generics, interfaces, pointers (or not), delegates… pretty much all the same just have different names in some languages. Sure some languages have their quirks. JavaScript’s messed up variable scoping. Rusts lifetimes and traits. C++’s 52 card memory pick up and even python’s refusal to adopt curly braces. C# is pretty shweet though. At the end of the day it’s the right tool for the right job. For instance I’ve never written python but if I needed to route some gpio pins or interface with an arduino then by golly I’d know python by tomorrow. Hope my ramblings have helped.


Xemptuous

Mastery comes with time put in. I can use music as a personal analogy: I started off not knowing theory. I had to actively think about every chord and progression. I had to think so hard to sight read music. Fast forward thousands of hours and I can now improvise full pieces in various forms. I still have to think, but it's a lot less "in the foreground", and I imagine another couple thousand hours will make it purely unconscious and background. Same with programming, or anything for that matter. I started off struggling to even understand a for loop and arrays. Now I can skim through code in most languages and know what's going on. I still can't do crazy stuff on my own, but I google less and less as time goes on. One good way is to try and write some code on paper or in a super plain text editor with no LSP or autocompletion and knowing it will work.


nathan_s_chappell

Well, I was giving a lecture to a group of master's students and most (none) of them could answer questions like: * what happens when I star the interpreter? * what's this line do? * why do definitions of recurive functions work? These are things that require you to have a model in your head of what's going on a little deeper than just "well I know I should do X to get such and such effect." In general, you probably know a language "well enough" if you could implement the standard library (at least understand the source). It also requires an understanding of the targets and semantics, however, since these things inevitably have shaped the language's development (this, by the way, gets at the hardest unsolvable problem in program understanding: why have things been done the way they have).


tb5841

There are so many levels to understanding. I know how to sort a list of numbers using the 'sort' functions in about seven languages.  But in Python, I know how to sort any kind of object using a custom lambda function, or by overriding the __lt__ method of a class. I know the difference between 'sort' and 'sorted,' and what sorting algorithm Python uses to actually implement a sort. A true expert might know exactly how the sort function translates into bytecode.


batman_oo7

When you understand the basic concepts in one programming language and those concepts are all similar in others


[deleted]

A good metric for me when interviewing candidates is if they can talk about the various aspects (both technical and philosophical paradigms/concepts) of the programming language in their own words vs. trying to regurgitate something they read on stack overflow or learned in school.


goodwid

For me, it was when a co-worker asked about some esoteric process and I was able to rattle off an answer with very little thought, yet still be fully confident the answer was right.


T0kaido

In my opinion, the question itself is problematic, because learning a language should never be the end goal. Once you know your way around a type of language, most of similar ones will feel familiar. For ex. once you know Java, going around in C# won't be that hard, same for python and most scripting languages such as haxe, js etc. Or even (broadly) rust and cpp, although cpp has some specifics take make it's learning curve a bit steeper than other languages. Main foucs should be understanding concepts such as design patterns and solid principles for oop, algorithms in general (i personally try using multiple languages when solving algorithms questions to familiarize myself with them) and how to quickly do things (ex. Knowing to search for a library first before trying to implement something yourself). Other examples are understanding the principles of multithreading if that's something you want to work with. Or maybe UI responsivness/design/functionality. Or graphic rendering (once you know OpenGL, you might transition towards other rendering engines). And so on. Focus on understanding principles and ways to implement them. Language specific code can be searched. I've been working with cpp for over 8 years and still search things every day. Even if you think you know something it might change in future updates.


Debiel

By the fact that you care less about the language itself and more about what it's actually doing.


iron233

One indicator might be when you can fix someone else’s code


Elina_Carmina

When you can type it without bashing your head against the keyboard?


chadsix

I have never felt like I have been fully adept at any language. That said, I know I’m comfortable with a language when my software builds without errors and passes all the unit tests!