0
$\begingroup$

Take a computer scientist with some skills of imperative, functional, and declarative programming languages excluding Python and knowing almost nothing about machine learning (e.g., he/she did 0 to 1 exercises on neural nets in his/her graduate studies decades ago). The exact portfolio of the programming languages that the individual knows probably doesn't matter, and for the sake of a concrete example, let's assume C, C++, C#, Spec#, Java, Assembler, Fortran, Pascal, Basic, JavaScript, VBScript, shell scripts, Maple, ML, LISP, F#, spreadsheet calculation, Boogie, Prolog, LaTeX, HTML, JSON, some basic CSS, some basic SQL.

How long would he/she need to learn Python including the necessary libraries? He/she would learn himself/herself using publicly available online tutorials. We'd like to have a concrete estimation, say, in person-days assuming a standard working of, say, 8 full working hours.

The goal would be to prepare for a course on the foundations of machine learning. The exact contents of the course probably doesn't matter, and for the sake of an example, let's assume supervised learning, unsupervised learning, evaluation and improvement, introduction to deep learning, basics in neural networks, convolutional neural network (CNN), transfer learning, regional CNN, methods of creative image generation, recurrent neural networks, word processing using neural networks, language models, deep reinforcement learning, Bayesian neural networks, project work); this course does require Python (and no other programming language). Though there's a preparatory course in Python taking 4 weeks, this preparatory course (1) is directed to more general public (programming beginners, computer scientists, IT specialists, people with experience in engineering or data analysis and specialists with relevant professional experience) and (2) prepares for a bunch of other topics as well (Scrum, requirements engineering, data engineering, cloud computing, Linux admin & engineering, backend development, Design thinking, software testing, Azure, data analytics, spatial analysis, frontend development, cloud administration, CCNA, statistics, big data, data manager, …); so the only conclusion we can make is an upper bound of 4 weeks = 20 person-days.

$\endgroup$
1

1 Answer 1

5
$\begingroup$

Actually your question is unanswerable, or, more precisely, has only a meaningless answer. Note that a uniform distribution has a perfectly well defined "average" (mean, median, whatever) but the average is entirely worthless as a prediction in any particular case.

I taught CS for 30 some years and have a working knowledge of only some of those things you assume as background. I never bothered with the details of javascript, for example, though I understand its principles and origin. I never had a project that required it, so why bother.

Furthermore, how long it would take and individual to learn this with some instruction would depend on the nature of the instruction. A basic general course in Python would almost certainly "teach" things that such a person doesn't need taught. A tailored course would bring them up to speed much faster.

Once you understand the fundamentals of OO programming (say with Java) and you understand the difference between statically and dynamically typed languages (say with knowledge of Scheme), then "learning" Python is very quick, being mostly a syntax issue.

The libraries are a different matter, of course, but with adequate commentary and a way to find the relevant things, the learning curve isn't very long.

But without those fundamentals, or with wasting time on things that don't need to be learned with only new syntax, a lot of wheel spinning will occur.

If you want to teach a course that is tailored to bringing the "average" CS person up to speed then first, learn you audience. Teach what they need to know. Express it in language they already understand. Then it can be quick.

Note that the main difficulty in learning a new language is that there may be a paradigm shift required. A paradigm assumes a way of thinking. A C programmer thinks about solutions in a different way than a Python programmer does, but a Java and a Python programmer think a lot alike (with a few key differences). Syntax is easy. Paradigms are hard.

$\endgroup$
1

Your Answer

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

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