4
$\begingroup$

I am new to Computer Sciences, working as machine learning engineer. I only know the basics of programming.

How can I improve my technical comprehension so that I will be able solve different problems in Computer domain?

Currently I have difficulty understanding technical blogs. The terms and jargon confuse me. Even after searching for those jargon in Google, I feel I don't reach anywhere.

For instance I was given a problem of image processing yesterday by the seniors in my company. I had no idea how to go about it. When I read about it words like 'parsing', structure comprehension were thrown at me. I would like to know whether it is the lack of computer background that's the problem or comprehension or something else. How am I to deal it?

$\endgroup$
3
  • 3
    $\begingroup$ Welcome to Computer Science Educators! It's difficult to tell what, exactly, you are asking. Could you edit your question to make it more specific? $\endgroup$
    – ItamarG3
    Dec 18, 2018 at 11:16
  • $\begingroup$ can you tell us more about your background? The situation you are describing sounds horrible to me (in every aspect). $\endgroup$
    – OBu
    Jan 5, 2019 at 10:06
  • $\begingroup$ How does one get a "machine learning engineer" job without some sort of background in machine learning? I'm not joking: it'd be fun to get such a job for myself just as a motivation for some deep machine learning study, but even with 3 decades of hardcore hardware and software engineering under my belt, I'm wholly unqualified simply because I didn't do much in machine learning beyond some very introductory exercises and superbly rudimentary applications - nowhere near any sort of state of the art... You've definitely got yourself a big mountain to climb!! How is your experience 2 years later? $\endgroup$ Aug 31, 2020 at 17:38

4 Answers 4

5
$\begingroup$

Abstract definitions are a deep rabbit hole. To illustrate the point:

First attempt

Imagine a non-English speaker trying to read the dictionary. First word: Aardvark. A nocturnal badger-sized burrowing mammal of Africa, ...
Wait, what does nocturnal mean? Done, occurring, or active at night.
Wait, what does occurring mean? ...

And this is the core of the issue: you end up with an ever-growing web of definitions composed of words whose definitions you don't understand. You've already had to look up more than three words and you're still not quire sure what an aardvark (the first word) is!

Second attempt

Let's try again. You're learning English because you want to work as a chef cook in an English speaking zone. You're going to be a pasta chef, so how about you look up the translation of dishes you know how to make. Afterwards, look up the translation of the ingredients you use to make these dishes.


Why was the second attempt so much more succesful? Simply put, because you were looking up the words that belong to a concrete concept you already know and understand.

When I read about it words like 'parsing'

When you look up what parsing is, you will get some vague and generalized definition. The dictionary isn't much help here, even when looking at the computing definition. Google tells me:

[COMPUTING] analyse (a string or text) into logical syntactic components.

This definition won't help you if you've never done any parsing before, or you haven't even thought about doing the act of parsing (even if you didn't know that it's called parsing).

So let's approach this from the other way: You are writing an application, and the users expect to be able to upload an excel file so that the data from the file can be saved in your application('s database).
How do you do that? Well, you will have to open up the file, look at the content of the file, and then add this data to your database.

Now you know that, it will make more sense what parsing is: parsing is making sense of the content you receive.
This can take on many forms, not just the reading of excel files. For example, when you ask Siri (or Alexa, or the Google Assistant) a question, it parses your sentence in order to understand what it means. When your web browser receives HTML from the web server, it parses the HTML in order to figure out what it needs to show to the user. When you load a savegame in a videogame, the game parses the save file to know what your last saved game state was.


So how do you learn computer science concepts?

The general rule is to approach it from a practical side. First, you try to accomplish something. When you struggle accomplishing it, or you want to read up on doing it even better; you will be able to look at the documentation and will already understand its inherent goal or what it adds.

For example, I am horrible at trying to understand new frameworks by reading the documentation or even seeing it presented. I learn much quicker by trying to use this, obviously failing because I don't know how to do things, and then look up how to do [simple thing, e.g. make the text bigger] in this framework.

By using this practical approach, my search for information is a directed search (like the chef looking for the translation of a dish he knows), as opposed to an abstract search (learning random words in the hopes that you'll want to use them in the future).

I'm not saying abstract searches can't be interesting. We've all spent some times clickbrowsing through Wikipedia or TV Tropes to find interesting things. But the abstract nature of computer science makes it hard to innately understand something you didn't know about before.

The best science teachers I've had always employed a similar strategy. At the beginning of the class, they pose a seemingly simple question, but the students are unable to actually find the answer. And only when they're curious about the answer to this question, the teacher starts to explain how to find the answer.


Other resources

The above answer is written in regards to your desire to self-learn. Of course, there are better ways of learning CS through courses and lectures. These courses are specifically designed to introduce concepts to you in a way that you understand them.
When self-learning, it's hard to know where to start and to separate the simple topics from the complex ones.

This is part of your issue. E.g. "parsing" is by no means a beginner topic. But if you had already learned the basics of file manipulation, collection (and preferably some OOP), the concept of parsing would've been a lot easier to understand from the get to. This is where guided courses help to, they ensure that you learn the necessary basics before starting on the more complex topics.


As an aside

I was given a problem of image processing yesterday by the seniors in my company

I don't mean to offend, but if you're currently struggling to grasp what parsing it, you're way out of your league of broaching the topic of image processing. There seems to be a huge disconnect between your current skill level and the tasks you're being given.

Whether you're in over your head at your current job, or your seniors are oblivious to your technical skill level, in either case I suggest being open about what you do and do not yet grasp. Trying to tackle complex subjects without the necessary basic skills is not only going to take a lot of time and effort, but it will inevitably teach you some bad habits because you will be unaware of alternative options.

$\endgroup$
0
4
$\begingroup$

You have a big job. The only way to do it is to just start.

The undergraduate CS curriculum, which forms a good basis, is about 500 hours of direct instruction and another 1000 or so hours of practice. The instruction is guided and the topics are selected by experts. You are trying to do all of that on your own. Big job, but not impossible.

You could start by viewing the curriculum of a respected college or university and finding out which text books they use. Don't buy them all at once, but it will give you a list of topic areas that you need to consider.

Now, you can proceed in one of several ways - need driven or interest driven or structured. You can also use a combined approach.

The need driven approach says to study now what you need now in your job. That is pretty good, except, as you have seen, you may not have the background to understand some of the topics as you are probably jumping into the middle of a deep subject.

The interest driven approach says to study what you want to study now. What seems interesting? Same problem though. You lack some of the basics.

The structured approach is to generally follow the course of study that you found in your look at college curricula. Programming, data structures, algorithms, ... The curricula are designed to provide the prerequisite knowledge for any given topic.

You don't need to use any one of the strategies exclusively. But if you find that you are studying something for which you don't have the prerequisite knowledge you will need to go back to those (hopefully more elementary) topics to enable your current study.

You can study the various topics in different ways. Books, online tutorials, online courses, courses at local colleges, speaking to colleagues, forming a study group, hiring a tutor, ...

Big job. Just start and don't stop.

$\endgroup$
1
$\begingroup$

I would find out what your current strengths are, and what your work requires and focus on the intersection (what is common in both) of these. (What were you hired for?).

Then concurrently (at the same time, well not exactly the same time, evenings and weekends and spare time at work), start learning stuff that will help you.

$\endgroup$
-3
$\begingroup$

while learning a programming first you should visualize the output and it will make easier you to code as well as u will be upgrade from the basis. while doing the work don't take stress and do it.do in interesting way so that you wont get boring and you will find the solution of problem easily.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.