Fun fact: I'm only partially-fluent in reading, writing, and speaking Japanese -- and in programming.
"Partially-fluent" meaning I can understand the prompt, but only answer in English or put together a basic, rudimentary response, most of the time without aid of a guide or translator.
I can ask for a bottle of beer in Japanese:
ビール一個をください。/ "Beeru ikko wo kudasai."
Programming, for me, is like this: I have the essential vocabulary to at least communicate to the console to have it print, "Hello World". However, asking the browser to iterate, "Hello World" to me every time I load a page is a completely different and more complex request to communicate.
Telling me to build an enterprise-level app from scratch fresh out of a coding bootcamp is akin to asking me to recite improvisational poetry in Japanese: heckin' intimidating and quite difficult with my current level of comprehension.
You're learning how to sweet-talk a computer/phone/browser/raspberry pi into doing the thing you'd like it to do.
Face it: you must make time every day to "speak" the language of choice. In my personal experience, I would tend to forget simple words if I don't practice, especially when reading and writing.
It's the same for programming: if I don't practice, I will forget the syntax for a for-loop.
Practicing every day will help solidify concepts since you're consciously, continuously exposed to them.
It also helps to save time: you won't have to scour MDN/W3C for basic concepts anymore!
You need to speak out loud: hear yourself say the words and understand what they mean. Yes, even when you're coding, you need to say out-loud what exactly you are doing.
My thought process out-loud:
Kanji for day, kanji for book -- OH That's the kanji for Japan -- kanji for "language" -- all together it says "Japanese". "を"? That's a connector indicating it's an action being done. Kanji for "to read" with the connecting ender "-ndeimasu" meaning it's a current action being done. It says "Nihongo wo yondeimasu". "I'm reading Japanese." Cool.
var list = [ "one", "two", "banana" ]; for (i = 0; list.length > i; i++)
"For, by the way: 'i' is currently zero--Anyway, as long as the length of the list array is greater than the value of 'i', add 1 to 'i'."
Speaking out loud has the same effect as practicing every day: solidifying the meaning-- the "why" in your head in a different manner other than reading. You can only do so much just reading a concept, especially as a kinetic learner.
You need someone with experience to help you: to show you the ropes, to guide you, to teach you what best practices are, and what phrases are used most often.
Granted, it could be difficult to find someone who meshes with your personality/learning style/etc., but there is always someone out there who is willing to help you out.
This is what I didn't have while re-learning Japanese, and what I needed when learning how to code: I needed someone to show me how it's done correctly. This is also why I enrolled in a coding bootcamp!
There are definitely cheaper ways to get help: being active on dev Twitter (#100daysofcode helps with reach, or simply DM-ing or @-ing your favorite developer might do the trick), reaching out to others via here on DEV or the freecodecamp forums. If you're on FB, joining a specific group for your chosen language is a good idea! Posting on Stack Overflow sometimes helps (if you're a masochist).
Now, I just need to have the courage to practice speaking Japanese out-loud with a native/fluent speaker.
I wish you luck on your own dev journey!
If you're fluent in a foreign and/or programming language, what steps did you take to become fluent? What resources can you share that will help a newbie out?
As software gets more and more integrated into our lives, the industrialization of its crafting process becomes inevitable. But the over-generalization of software engineering can be crushing the creative side of programming.