Course Review – Algorithms, Part I (Robert Sedgewick, Princeton)

Here is my review of Algorithms, Part I course offered on Coursera in Jan-Mar 2015.
Course has ranking of 4.4 out of 5 (very good), programming assignments are hard, but I managed to get 100% on them.

Technologies: basic algorithms and data structures, which every serious programmer must know + homework helps master coding in core Java.

Material: union-find, sorting, stacks and queues, symbol tables, priority queues, binary search trees, and KD trees. The course largely follows “Algorithms” book.

Instructor/lectures: Robert Sedgewick is recognized for his seminal contributions to CS and is probably the most famous author of books on algorithms after his PhD advisor Donald Knuth.

Course Review – Text Retrieval and Search Engines (ChengXiang Zhai, UIUC)

Here is my review of Mar-Apr 2015 Coursera incarnation of Text Retrieval and Search Engines, which is the second course in Data Mining specialization. It has mixed rankings, while I passed with 97.5% grade.

Technologies: Search is a critical area of modern software giants like Google, Microsoft, Yahoo, Yandex, Baidu etc. The course discusses various aspects of natural language processing (NLP) and search. It touches on PageRank, Google file system (GFS), and MapReduce processing for big text data. Homework assignments introduce MeTa toolkit + some homework is done in C++.

Material: The basic ideas of efficient information indexing, storage, retrieval and ranking are presented with the emphasize on applications. Course discusses vector space and probabilistic text retrieval models based on a bag of words concept. Advanced topics include ranking based on links, user feedback, and big text data. Homework includes programming competition for the best ranking algorithm implemented by a student within MeTa.

Instructor/lectures: ChengXiang Zhai is a prominent researcher in Information Retrieval and Natural Language Processing. He worked in the industry as a Research Scientist. Lectures are well structured thanks to the central slide presenting the course topics.

Course Review – Pattern Discovery in Data Mining (Jiawei Han, UIUC)

Here is my review of Feb-Mar 2015 incarnation on Coursera of Pattern Discovery, which is the first course in Data Mining specialization. Ranking is 2.2 out of 5 (bad), while I passed with 99.3% grade.

Technologies: Data Mining is the process of extracting knowledge from data.
The basic ideas and techniques are learnt: Apriori principle, frequent pattern growth, pruning, etc. Due to the absence of homework substantial efforts are needed to apply to real problems.

Material: the course presents foundations of data mining by describing the basic notions and their relations (pattern, knowledge, mining process) +
presenting a variety of efficient pattern discovery algorithms. The outlined applications are in text processing, network/graph knowledge discovery, and advertising.

Instructor/lectures: Jiawei Han is a world-leading researcher in data mining.
He is enthusiastic to describe the details of techniques, but frequent omissions/typos + lack of programming assignments make it challenging to fully understand and internalize the concepts.

Course review – Machine Learning (Andrew Ng, Stanford)

Here is my review of Sep-Dec 2014 incarnation of Machine Learning course on Coursera. Ranking is 4.8 out of 5 (excellent), while I passed with 100% grade.

Technologies: machine learning is a technology in itself, playing a central role in image recognition and machine vision, autonomous cars, search, AI, etc. Neural networks presented in homework can be readily adapted for a problem at hand. Learnt techniques can be used to gauge and optimize performance + visualize results and guide further improvements. Homework teaches Octave/Matlab.

Material: the course offers an introduction to machine learning, a flourishing field of CS. Various machine learning techniques are presented from simple logistic regression to neural networks and support vector machines. Multiple applications are described such as anomaly detection, recommender systems, and OCR.

Instructor/Lectures: Andrew Ng worked closely with Google and Baidu Research on applied machine learning. He is very enthusiastic about the subject. Andrew often provides practical tips and elaborates on common pitfalls in the real-life applications.

My studies of advanced Java SE and preparation for Oracle Certified Java Professional 1Z0-804 exam

The second level of Java certification is becoming an Oracle Certified Java Professional. In Sep 2014 I got a job offer from Deutsche Bank for Software Development Engineer position. For several weeks before the start of job I studied for 1Z0-804 exam, and successfully passed it on 10 Oct 2014.

Here is what I did to prepare:
Step 1. Made a study plan largely based on my preparations for the associate certification. This time the plan included advanced topics such as design patterns. The full list of topics can be found here. I wrote notes for all materials I studied and then looked through the notes before the exam.

Step 2. Read relevant parts of the official Oracle tutorial, well-referenced by the Really Big Index. In particular, the trails helpful for the professional certification are:
Learning the Java Language (especially generics),
Essential Classes (Exceptions/ I/O / Concurrency),
Collections, Internationalization, JDBC Database Access.

Step 3. Watched tutorials on SkillSoft (got access through one of the recruiters).
In particular, “1Z0-804 Java SE 7 Programmer II” series of courses proved helpful.
It contained 3 tutorials: “Syntax and Class Design”, “Generics, Errors, and I/O”, and “File I/O, Concurrency, JDBC, and Localization”. The tutorials covered Data Access Object pattern.

Step 4. Separately studied design patterns by reading chapters of “Design Patterns: Elements of Reusable Object-Oriented Software” and “Head First Design Patterns“. The former book is written 20yrs ago, but is still an unsurpassed standard in the field.
Besides DAO, the exam covers Abstract Factory, Factory, and Singleton patterns.

Step 5. Separately studied NIO, Collections, and Concurrency by readings through API.
After all, the official Oracle API is the most-authoritative source of information about Java. The general descriptions of interfaces are written very well, e.g. List Interface.

Step 6. Looked through “Study Tonight” guides. They have nice organization of material, e.g. Collection Framework.

Step 7. Took several practice exams. Enthuware has a great battery of up-to-date practice tests. I got quite anxious after failing the first practice test with a score of 64%.
However, after some catching up in the weak areas, I boosted the score to ~75%.

Step 8. Developed a strategy for the exam. It has 90 questions per 150 minutes. Answering 9 questions every 15 minutes is a good target. The exam has both short easy questions as well as tough questions with 2-3 pages of code samples.
One has to answer short questions in 30 seconds to have a luxury of spending 3-4 minutes answering long questions. Every other question has “code does not compile” option. By the conclusion of studies my brain worked as a quite good Java compiler…

As an added bonus came previous studies of “Java Concurrency in Practice” book, which really helped me during the interview at Deutsche Bank.

I got a score of 85% on the real exam!

My studies of core Java and preparation for Oracle Certified Java Associate 1Z0-803 exam

Java is probably the most in-demand programming language in the world.
Certification serves as one of the ways to impress the potential employer,
especially if you’ve just recently started to learn the language or/and if your exam score is high. I’ve started learning Java in March 2014 and passed 1Z0-803 exam on 3 Jul 2014 to become an Oracle Certified Associate.

Here is what I did to prepare:
Step 1. Copied the exam topics from the official certification website and made a study plan: watch video tutorials, study the official guide, study some unofficial Java guides, do some practice tests, and develop a strategy for the exam.
Step 2. Worked through a video tutorial. I chose the one by “Patrick DC” and paid for a full 5hr version. It appears to be relatively simple, but does help to get the syntax down + explains in great detail the OOP principles. More tutorials are available on Youtube for free. The videos by Derek Banas are quite popular and are highly ranked, but I find them to be somewhat hectic.
Step 3. Studied the official Oracle learning trail “Learning the Java Language”. It covers topics in sufficient detail and has relevant exercises. On the first reading one can omit the topics of Nested Classes, Annotations, and Generics – those are not in 1Z03-803 exam.
Step 4. Went through the “Java Study Tonight” guide out of a plethora of available online study materials. It features more insights into the inner workings of Java and topical tests. For example, I learnt how static initializers/initializers/constructors are called for the parent-child combination.
Step 5. Took several practice tests from a series by Hanumant Deshmukh. This series is an undisputed leader in 1Z0-803 practice tests, because it is up-to-date, offers a great selection of questions, and costs only $10. My scores in practice exams were: 78%, 70%, 78%, 78%, 78% (remarkably constant with the exception of Test 2).
I scored well in Test 1, and immediately signed up for OCAJP exam for 3 days later.
Over the course of next 2 days I passed 2 practice exams per day and gained more confidence.
Step 6. Developed a viable strategy. I learnt to manage my time efficiently during the test by dedicating approximately 12 minutes to a block of 7 questions (real exam is 120min long and has 70 questions). Another great idea is to start working on the question by reading through the answers: if “code does not compile” is one of the answers, then the approach to reading the question is adjusted.

The real exam went quite smoothly and I got a 93% score.
There weren’t any unexpected questions, since the practice exams prepared me for the worst. The real exam had a standard set of tricky problems: two questions with almost identical pieces of code, but vastly different outcomes + some unreachable code questions.

The most unusual syntax

After nice and clean syntax of C and Java, some features of SQL appear a little quirky. OK, Perl with its pattern matching has infinitely unreadable pieces of valid code, but I didn’t expect anything unusual from a relatively simple language like SQL, in particular its realization within MySQL. The quirky feature is the change of a delimiter, the symbol, which ends statements. Who would have thought one needs to change that symbol?!

# Before defining a stored procedure we change the delimiter, so that MySQL interpreter does not think the statement is over seeing “;” inside the body of a procedure

DELIMITER //
CREATE PROCEDURE MailingListCount (OUT Num INT)
BEGIN
SELECT COUNT(*) INTO Num FROM Customers;
END//
DELIMITER ;
CALL MailingListCount(@a);
SELECT @a;