0% found this document useful (0 votes)
18 views3 pages

Programming Advice for Beginners

Uploaded by

Júlia Pereira
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views3 pages

Programming Advice for Beginners

Uploaded by

Júlia Pereira
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

20/01/2024, 19:09 Reddit Embed

desrtfx commented on post

In general, your post is very encouraging and nicely written.

It just irks me when people mix two distinct things (like you do as well):

learning a programming language

learning to program

The two items above are distinct and not the same in any matter. Especially
beginners often confuse learning a programming language (in syntax and
grammar) with learning to program (the actual, difficult part).

Sure, in order to be able to program, one needs both, a language and knowing
how to program.

Your order of things:

1. Learn syntax

2. Solve problems

3. Make stuff

is definitely not the worst approach, but it brings one major problem:

Learning out of context is more difficult than learning with relatable context.

If you just initially focus on the syntax, you learn without context - you memorize
and memorizing and programming don't go together. Memorizing kills
programming creativity because after having memorized the general syntax (which
up to a certain degree is a necessary evil), many beginners start memorizing
algorithms in the context of their current programming language - and here is
exactly where the problem lies. It doesn't make sense to memorize an algorithm in
a certain programming language - algorithms need to be understood on a
conceptual, abstract level independent from programming languages.

As an example:

In Java, you use a Scanner instance to obtain keyboard input, so people will write
something along:

Scanner keyboard = new Scanner([Link]);

// more code
[Link] 2/5
20/01/2024, 19:09 Reddit Embed
// more code

int value = [Link]();

A beginner might want to memorize the above snippet for later reuse.

Rather than memorizing the code, it is essential to understand what the code does
and why it does what it does in a certain way.

So, instead of memorizing the code, it is better to memorize:

When I need input from a keyboard, I need some object that can acquire that
input

When I need a certain value, I use one of the methods of the object above to
obtain what I need

This abstract concept transfers well across many languages. Once understood, all
that needs to be done is to translate the concept into the actual implementation
in the required language. Be it Java, C#, C++, or any other language.

Another example:

I want to iterate through an array:

for(int i = 0; i <= [Link], i++) {


// do something with myArray[i]
}

Again, the actual code is secondary. I only need to know that I need a way to
access each and every element in the array. How exactly I do that depends on the
language implementation.

This abstract or conceptual learning becomes even more important with data
structures and algorithms. It is hardly ever necessary to be able to recite the
implementation of any algorithm in any language, but it is very important to
understand the algorithm on a conceptual level so that it can be implemented in
any given language.

Your item #2: Solve problems is where most people drop out of programming.

Why?

Because solving problems requires to learn a different way of thinking - thinking in


algorithms or abstract thinking. This is a purely acquired and trained skill that
initially requires lots and lots of effort and is very hard. It definitely gets easier over

[Link] 3/5
20/01/2024, 19:09 Reddit Embed
time and with more practice.

Especially in this step, beginners often make one major mistake: They give up too
quickly ("I've been on that problem for half an hour and can't come up with a
solution") and resort to resources on the internet, which, in turn frustrates them
because often the solution is either very easy, or way over their head.

When I learned programming, there was no internet and there were hardly any
knowledgeable people around that could be asked, so I was forced to struggle
and find the solutions on my own. Often, it took days to come up with something
useful, but there was no other choice.

The internet with all its benefits has made people too much dependent and lots
less self-sustaining. Instead of really biting through a problem it is way easier to
fire up our good and essential friend, Dr. Google, and get the solution in a matter
of seconds. Then, they implement the solution without spending time to actually
understand it (copy-paste code monkey style) - which is a huge red flag. It is fine
to look at other's code, but only as a reference and help to understand it.
Especially beginners should write every piece of code on their own. This trains
problem solving and analysing skills.

I am definitely stating that the more and longer you struggle with a problem, the
better you will become as a programmer because you rely less on external
sources.

Another issue:

When attacking a new problem or task, beginners often directly rush to the
keyboard and start programming away. Again, this is the wrong approach. Before
even thinking about going near the computer, especially beginners should spend
considerable time to analyse the problem and to devise a solution on paper (not
necessarily in a real programming language). The time spent planning and
thinking about the task is not wasted, rather the contrary is the case. The better a
problem is analysed, the more time is spent on consideration, the better the final
result will be.

Again, back when I learned to program (before I bought my own computer),


access to computers was extremely limited. I could access our school's Apple ][
Europlus for two hours per week in a single session. So, the majority of my
programming was done offline - without access to a computer. I planned, I wrote
my code, I debugged the code in my mind, and then, when I was sure that it
would work and produce the desired output, I used my session to actually type in
the program. Most of the time, the programs worked without problems - besides
occasional syntax errors produced during typing.

IMO, learning to produce and trace code without a computer is an essential skill in
the toolbelt of a programmer. This way, again, a programmer becomes self-

[Link] 4/5

Common questions

Powered by AI

Understanding the cultural context of programming learning environments can impact one's approach by highlighting the shift from resource-limited, self-taught methods to today’s resource-abundant learning environments. Recognizing this shift encourages learners to balance the use of online resources with independent problem-solving and critical thinking. It can guide learners to strategize effectively by acknowledging past limitations and applying those lessons to avoid over-dependence on technology, fostering a more well-rounded skill development .

Offline coding practice plays a significant role in developing programming skills because it enhances a programmer's ability to plan, conceptualize, and trace code without immediate reliance on a computer. This method emphasizes thorough understanding and mental debugging, which builds self-reliance and deeper problem-solving skills. Offline practice encourages a focus on logic and thought processes rather than syntax errors, contributing to a programmer's long-term skill development and adaptability .

Focusing solely on memorizing syntax is a mistake because it promotes learning out of context, which is more difficult than learning through relatable context. Programming requires creativity and an understanding of abstract concepts beyond just knowing the syntax. Memorizing kills programming creativity because once beginners memorize syntax, they tend to memorize algorithms in the same way, which is not advisable. Algorithms need to be understood on a conceptual level independent of specific programming languages .

Beginners gain several advantages from solving programming problems independently, such as strengthening their critical thinking, enhancing understanding of programming concepts, and building resilience. By working through problems without immediate external help, they develop analytical skills and creative thinking, leading to a deeper mastery of programming. This self-reliance builds confidence, reduces the risk of becoming overly dependent on external resources, and ultimately results in a more robust and adaptable skill set .

Limited access to technology in the past influenced programming education by necessitating alternative learning strategies focused more on planning, mental visualization, and offline practice. These constraints encouraged deep learning, self-reliance, and preparation before actual coding. The lessons to apply today include emphasizing offline problem-solving and concept understanding before resorting to technology. This approach can build a stronger foundational understanding and adaptability to newer challenges in programming .

Beginners can improve problem-solving skills in programming without immediate computer access by planning and writing code offline, analyzing problems on paper, and debugging in their mind. This approach forces learners to conceptualize solutions thoroughly before implementation. Practicing this method helps in developing critical thinking and deepens one’s understanding, which results in a better grasp of programming concepts and a more independent problem-solving ability .

Understanding algorithms at a conceptual level rather than memorizing their implementation in specific languages is crucial because it allows for the algorithms to be implemented in any given language. This abstract thinking is necessary because programming languages differ, and understanding the underlying principles of an algorithm enables a programmer to adapt it to various contexts and challenges. This form of learning is more versatile and deepens the programmer's skills beyond simple memorization .

Over-reliance on online resources affects beginners' confidence in programming negatively because it creates a dependency that undermines their ability to solve problems independently. This dependency can lead to frustration when faced with challenging tasks, as beginners may struggle to apply their knowledge without external aid. It diminishes the confidence necessary for experimenting with and understanding complex programming concepts, as they rely on copying rather than learning through trial and error .

Reliance on the internet for programming solutions negatively impacts the development of problem-solving skills because it makes learners dependent on external sources rather than developing their own analytical abilities. This dependence discourages thorough understanding, as learners often implement copied solutions without grasping the underlying concepts. It leads to a surface-level engagement with programming tasks, which can hinder the development of independent problem-solving skills and creativity in coding .

Many people drop out of programming at the problem-solving stage because it requires learning a different way of thinking—algorithmic or abstract thinking—which is a hard-to-develop, acquired skill. This process requires significant effort and persistence. Beginners often make the mistake of giving up too quickly when they encounter difficult problems, which leads to frustration and reliance on external solutions. This lack of perseverance and understanding can lead to a halt in their learning progress .

You might also like