I was recently warned by students from the Faculty of Mathematics and Informatics (FMI) at Sofia University that our course “High-Quality Programming Code” was offered for only 100 students like most elective courses at FMI. We are looking for a way to extend the maximum allowed attendees but we cannot go aside the official administrative rules at the Faculty.
All Students from FMI will be Accepted
The course organizers agree that all FMI students who want to attend this course are welcome to take part in all training activities (lectures, exercises and course projects) even when not officially joined through the official university information system “SUSI”. We hope we will be given large enough hall to fit all attendees. Students who pass successfully all their exams and graduate this course will be allowed to reuse their grades for the next year.
For more information keep checking the “News” section at the course’s official Web site: http://codecourse.telerik.com.
Posted by nakov as news, blog at 4:42 PM EET
Comments Off
Starting from February 2010 I will lead a team of software engineering professionals from Telerik Corporation who will teach the course “High-Quality Programming Code” in the Faculty of Mathematics and Informatics (FMI) at Sofia University and at the Technical Univesity - Sofia (TU-Sofia). The course complements the fundamental university education with important software development and code construction concepts and best practices. The outcomes for the students are the acquisition of knowledge and skills for building high-quality programming code, practical skills for code refactoring and unit testing.
Course Organizers
The course is organized by Svetlin Nakov and his team with the cooperation of the Department of Software Technologies in FMI and the Students Council in TU-Sofia. The course is supported and sponsored by Telerik Corporation (large Bulgarian software development company recently listed in the Red Herring: Global 100 Winners).
Course Annotation
The „High-quality programming code” course objective is to introduce the students to the principles of high-quality programming code construction during the software development process. The quality of the code is discussed in its most important characteristics – correctness, readability and maintainability. The principles of construction of high-quality class hierarchies, classes and methods are explained. Two fundamental concepts – “loose coupling” and “strong cohesion” are defined and their effect on the construction of classes and subroutines is discussed. Some advices for correctly dealing with the variables and data are given, as well as directions for correct naming of the variables and the rest elements of the program. Best practices for organization of the logical programming constructs are explained. Some methodologies for testing, debugging and code optimization are introduced. Attention is given also to the “refactoring” as a technique for improving the quality of the existing code. The principles of good formatting of the code are defined and explained. The concept of “self-documenting code” as a programming style is introduced. The techniques and practices for constructing high-quality programming code discussed in the course are independent of the programming languages.
Training Program
- Course Overview. Introduction to High-Quality Programming Code. Entrance Project
- Fundamentals of Software Engineering
- Naming Identifiers in the Source Code. Naming Classes, Methods, Variables, Parameters and Other Elements of the Code
- Designing High-Quality Classes and Class Hierarchies. Best Practices in the Object-Oriented Design
- High-Quality Methods. Strong Cohesion and Loose Coupling
- Using Variables, Data, Expressions and Constants Correctly
- Using Control Structures, Conditional Statements and Loops Correctly
- Correctly Formatting the Code. Code Documentation, Comments and Self-Documenting Code. Code Conventions
- Defensive Programming. Using Exceptions Correctly. Performance Tuning and Code Optimization
- Code Integration. Refactoring Existing Code to Improve Its Quality
- Software Quality Assurance. Testing and Debugging. Unit Testing. Test-Driven Development
- Development Tools. Development Environments. Change Management Systems. Code Analysis Tools. Automated Testing Tools. Automated Build Tools. Continuous Integration Tools
- Test Covering the All Studied Topics
- Course Projects: Assignment, Guidelines and Discussion
- Psychology of Computer Programming
Lecturers Team
- Svetlin Nakov – Manager Technical Training, Telerik Corporation, Telerik Academy, Blog: http://www.nakov.com/blog
- Vesko Kolev – Software Engineer, Telerik Corporation, Blog: http://veskokolev.blogspot.com
- Tsvyatko Konov – Software Engineer, Telerik Corporation, Blog: http://tsvyatkokonov.blogspot.com/
- Yordan Dimitrov – Software Engineer, Telerik Corporation, Blog: http://blogs.telerik.com/jordandimitrov/
- Radoslav Kirilov – Software Engineer, Telerik Corporation, Blog: http://radoslavkirilov.blogspot.com/
- Stefan Dobrev – Software Engineer, Telerik Corporation, Blog: http://blogs.telerik.com/stefandobrev/
- Nikolay Ganchev – Software Engineer, Telerik Corporation
- Ivaylo Bratoev – Software Engineer, Telerik Corporation
Requirements to the Students
- Computer programming skills
- Knowledge of object-oriented programming
- English language
Assesment and Exams
Assessment is based on test (theory) and course project (practice). The test consists of 40 questions covering the course content. The course project has two parts: entrance project (small programming problem that should be solved in C#, Java or C++) and final project (refactoring of low-quality code and adding unit tests).
Official Web Site
Visit the official Web site of the course “High-Quality Programming Code”: http://codecourse.telerik.com/.
Posted by nakov as news, blog at 2:01 PM EET
Comments Off
Starting from February 2010 I will lead a team of .NET software engineering professionals who will teach the course “Web Applications Development with .NET Framework and ASP.NET” at the Technical Univesity - Sofia (TU-Sofia). The course complements the fundamental university education with contemporary Web development technologies. The outcomes for the students are the acquisition of practical skills for building rich-data Web applications based on .NET Framework, LINQ-to-SQL, SQL Server, ASP.NET, AJAX and Silverlight.
Course Organizers
The course is organized by the Students Council in TU-Sofia who invited Svetlin Nakov and his team to teach it for all students in TU-Sofia. The course is supported and sponsored by Telerik Corporation (large Bulgarian software development company which was recently listed in the Red Herring: Global 100 Winners).
Course Annotation
The „Web Applications Development with .NET Framework and ASP.NET” course objective is to introduce the students to the fundamentals of C#, .NET Framework, databases and Web application development with ASP.NET and AJAX. Students will learn how to build dynamic data-driven Web applications with SQL Server and ASP.NET. The course starts with the basics of C# language (data types, expressions, statements, loops, arrays, methods, strings, collections, exceptions, etc.), object-oriented programming with C# (classes and interfaces, constructors, properties, events, methods, etc.), relational databases, SQL language and SQL Server, data access technologies (LINQ and LINQ-to-SQL). The main focus is on Web technologies, starting from HTTP, HTML, CSS and JavaScript, through the fundamentals of ASP.NET and ASP.NET Web Forms. Advanced topics include building rich-data applications with ASP.NET data-bound controls, using master pages, AJAX and Silverlight. All topics covered in the course will be demonstrated in a practical session demonstrating how to build building a sample dynamic rich-data Web application from scratch, step-by-step.
Training Program
- Course Overview – Presenting the Course Objectives, Lecturers, Exams, etc..NET Framework Overview – .NET, .NET Framework, CLR, MSIL, Assemblies, CTS, .NET languages
- C# Language Overview – Part I – Data Types, Operators, Expressions, Statements, Console I/O, Conditional Statements, Loops, Arrays, Methods
- C# Language Overview – Part II – Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes
- Object-Oriented Programming with C# – Defining Classes, Constructors, Properties, Methods, Delegates, Events, Static Members, Interfaces, Inheritance, Polymorphism
- Databases, SQL and MS SQL Server – RDBMS, SQL Language, SQL SELECT, Joins, Aggregate Functions, Grouping, SQL INSERT, SQL UPDATE, SQL DELETE, MS SQL Server, SQL Server Management Studio
- LINQ and LINQ-to-SQL – LINQ Operators and Expressions, Projections, Conversions, Aggregations, LINQ-to-SQL, Visual Studio LINQ-to-SQL Designer, Using DataContext to Read / Create / Update / Delete Data
- Web Technologies Basics – HTTP, HTML, Text, Images, Tables, Forms, CSS, JavaScript
- ASP.NET – Part I – ASP.NET Web Forms, Code Behind Pages, Page Execution Model, Web Server Controls, HTML Server Controls, Creating Simple Web Applications
- ASP.NET – Part II – Data Binding and Data-Bound Controls: Data Sources (LinqDataSource, ObjectDataSoucre), GridView, FormView, DetailsView, DataList, Repeater, ListView, Pager
- ASP.NET – Part III – Session and State Management, Master Pages and Navigation, User Controls, Web.config, ASP.NET Membership, IIS and Deployment
- ASP.NET AJAX – ScriptManager, UpdatePanel, AJAX Control Toolkit
- Silverlight – XAML, Text, Images, Graphics, Shapes, Creating Silverlight Applications, Text Controls, Buttons, List Controls, Data Binding and Data-Bound Controls
- Practical Project Demo – Creating Dynamic Rich-Data ASP.NET Web Application – Step-by-Step Live Demo
- Additional Topic #1 – Student will Suggest Interesting Topics
- Additional Topic #2 – Student will Suggest Interesting Topics
Lecturers Team
- Svetlin Nakov – Manager Technical Training, Telerik Corporation, Telerik Academy, Blog: http://www.nakov.com/blog
- Ivaylo Hristov – Managing Partner, Komfo Bulgaria, Blog: http://ivaylo-hristov.net/
- Mihail Stoynov – Technical lead, Materna Bulgaria, Blog: http://mihail.stoynov.com/blog/
- Ventsislav Popov – Developer, Crossroad
- Branislav Abadjimarinov – Senior .NET Developer, ProPeople, Blog: http://abadjimarinov.net/
- Svetlin Ralchev – software engineer, Telerik Corporation, Blog: http://blog.ralch.com/
- Ivaylo Bratoev – software engineer, Telerik Corporation, Blog: http://blogs.telerik.com/ivaylobratoev/
Requirements to Attend the Course
- Basic computer programming skills
- Basic understanding of object-oriented-programming (OOP) concepts
- English language
Assesment and Exams
Students will be assigned to develop as a practical project dynamic Web application based on .NET Framework, ASP.NET Web Forms, SQL Server and LINQ-to-SQL. Sample projects: dynamic photo album, CMS system, blog system, dating site, online game, Web mail, etc.Authors of the best projects will be awarded by our sponsor Telerik.
Official Web Site
Visit the official Web site of the course “Web Applications Development with .NET Framework and ASP.NET”: http://aspnetcourse.telerik.com/.
Posted by nakov as .net, news, blog at 3:24 PM EET
Comments Off
I was recently invited by the Board of European Students of Technology (B.E.S.T. Sofia) to give a talk on “Practical Software Engineering Fundamentals” in the Technical University of Sofia. The event is designed for students who wants to become software engineers.
- Venue: TU-Sofia, hall 1153
- Date: 8 February (Monday), 18:00
Software engineering defines the software development project lifecycle as sequence of activities, such as requirements analysis, architecture, design, code construction, testing, debugging, integration, deployment, maintenance, etc., which are performed following the practices of given development methodology applying a set of project management activities for planning, monitoring and controlling the project.
In this talk the speaker Svetlin Nakov will introduce the audience with the most important software engineering activities and will explain the typical software project lifecycle. Comprehensive examples will be given along with the theoretical fundamentals. Typical documents and templates used during the software development process will be presented including: software requirements specifications (SRS), software design documents (SDD), test plans, project plans, etc.
The event is supported by Telerik Academy.
Posted by nakov as news, blog at 4:01 PM EET
Comments Off
In the last few months I am working as full-time consultant for the training initiatives in Telerik. It is really an exciting company and I really enjoy my job as manager of the technical training and university relations. I still can’t believe that Telerik is really perfectly organized company, beyond my expectations and even dreams. It is unusual company with specific culture, structure and traditions. Unlike traditional companies our CEO sits behind me along with few developers, not in a separate “big boss room”. I will blog about Telerik in details another day. Now let me present my main work at Telerik.
Telerik Academy
Today I launched a new long-term training project called “Telerik Academy“. Telerik Academy is an initiative of Telerik Corporation aiming to provide free real-world practical training for young people who want to turn into skillful .NET software engineers and join the company development teams. The training complements the traditional University education with the cutting edge industry technologies from Microsoft and best practices in software engineering.
During the Telerik Academy training program highly motivated young people are attracted and candidates covering the program requirements are trained free of charge in the fundamentals of computer programming, logical algorithmic thinking, data structures, algorithms, problem solving and object-oriented concepts. The best of them are selected through exams and interviews and continue to the next level of training – .NET Development Essentials course, covering the .NET Framework class library, databases, SQL Server and LINQ, Web technologies, ASP.NET and AJAX, Windows Forms, WPF and Silverlight, as well as software engineering. Having successfully finished this stage the top students qualify for an additional specialized course in one of the following technological directions used in Telerik: ASP.NET & AJAX, Windows Presentation Foundation (WPF) and Silverlight, Windows Forms and Data-Centric Development. Finally, those who graduate will be presented with the opportunity to join the Telerik team and help us deliver exceptional software to the world.
Telerik Pays to Students to Study .NET Technologies
Telerik pays its trainees at Telerik Academy to learn the .NET technologies for few months and provides job for the best graduates. We are growing even during the global financial crisis and Telerik Academy is our way to grow with highly-motivated and skillful junior developers. Our learning track takes 6 months:
- Foundations of C# Programming (Part 1) - 100 people, free of charge, 1 month, 8 hours/week, staring in February
- Foundations of C# Programming (Part 2) - 50 people (filtered by exam), free of charge, 1 month, 12 hours/week, staring in Marh
- .NET Programming Essentials - 15-20 students, 3 months, 4 hours/day, staring in April
- ASP.NET / Windows Forms / Silverlight & WPF / Data-Centric - 10-15 students, paid to be trained, 1 month, 8 hours/day
- All successfully graduated people start work in Telerik
Program Requirements
The minimum requirements for any candidate are:
- Ability and willingness to work at full time (8 hours/daily) - after the first 2 months
- High motivation to become software engineering professional
- Technical English
- Computer literacy
- Long term commitment
Apply for Telerik Academy
To apply for free 6-months .NET training visit the Telerik Academy official web site.
Posted by nakov as .net, news, blog at 10:13 PM EET
Comments Off
Starting from March 2009 I left the National Academy for Software Development (NASD). NASD was really nice project and it was running successfully for few years but the idea changed so much that from some point in 2008 I was no longer able to enjoy doing this work.
Why I left NASD?
1) My dream was about running a software development training center where people get 100% free training and this was really achieved in 2006, 2007 and 2008. At some point the trainings became paid and I was no longer motivated to participate.
2) I really enjoy teaching young and motivated people in software technologies and software engineering and I really do this job well but NASD was fast growing (30 employees in 2008) and at some moment the things got out of my control. Initially I teached all the courses and the teaching quality was superior. Later we employed junior trainers who was good but not the same level like me. Some business partners of mine told me that they want me to teach the people personally. This was not possible because in 2007 and 2008 I was team leader of 5 to 7 software development projects in the same time and coordinator of all training courses. At some moments we had 8 courses running in parallel. We employed few developers who was working on projects in the day and on trainings in the evenings. Most of them were really good developers and good trainers, but people still asked me to teach the people myself. This was the second reason to leave NASD and to find a different way to conduct software development trainings.
What will Happen with NASD?
Please don’t ask me this question. I really don’t know and this is out of my control! NASD was founded by me (with few partners) but I was never been CEO of NASD Ltd. and I even had a minor share of it all the time. I left NASD when the trainings became paid and some students needed to pay for some courses that were initially offered as free. I didn’t like this to happen and I left this company. Now my former partners are driving it. I am no longer involved in any activity that NASD is performing.
Free Trainings, New Academy or What is Next?
This is a good question. In November 2009 I joined Telerik Corporation to organize software development trainings for producing skillful .NET software engineers. Now I lead the project called Telerik Academy that is bringing me back to my initial idea of creating a software development academy. We provide free software development courses and I personally teach all the students in Telerik Academy. I feel closer to my dreams about teaching motivated young people in software engineering and technologies free of charge and preparing them for the real world industrial software development. Note that Telerik Academy is not a successor of NASD. I just moved to a new job. I believe the results will be outstanding like in the first days of NASD.
Posted by nakov as news, blog at 10:37 PM EET
Comments Off
Today I with Vesko Kolev started a new project: writing a C# book in Bulgarian for beginners that covers the fundamental concepts of computer programming, data structures and algorithms as well as object-oriented concepts, high-quality programming code and problem solving. The book is titled “Introduction to Programming with C#” and will be based on its well-known sister, the book “Introduction to Programming with Java”. Most of the book content will be adaptation of its Java variant but some new concepts will also be introduced. The book focuses on the fundamental concepts of computer programming, not just the C# language. It covers topics like recursion, data structures (linear, trees, graphs, hash-tables and sets), combinatorial algorithms and problem solving which can not be found in every C# book. The book does not cover software engineering, Web programming, databases, desktop applications, mobile applications and other software technologies, just the bases of computer programming, logical thinking and problem solving. The book is free and open-source and is driven by volunteers who like to share their knowledge and skills with the young developers who try to make their first steps in computer programming and software engineering.
The book’s official Web site will be located at: http://www.introprogramming.info.
The developer’s Web site is located in Google Code: http://code.google.com/p/introcsharpbook/.
The SVN repository containing all project assets is located at: http://introcsharpbook.googlecode.com/svn/trunk/.
The developer’s mailing list (discussion group) is located at: http://groups.google.com/group/introcsharpbook.
Authors and editors are welcome to help the project. To join to this open-source voluntary project please contact Svetlin Nakov or Vesko Kolev. The working language is Bulgarian (some day we plan to publish an English version but let’s do the things step-by-step).
Posted by nakov as .net, news, blog at 2:46 AM EET
Comments Off
Last week I needed to implement a piece of software for scanning small documents (bank payment orders). The problem was to scan documents with specific size (less than A4) in 300 DPI and with normal brightness and contrast. I found that in C# there are two general approaches to this problem:
- Using the TWAIN interface
- Using Windows Image Acquisition (WIA) API
Both interfaces are not natively supported in .NET Framework so some kind of wrappers was necessary to be developed. I choose WIA because it was simpler and higher level API with sufficient enough power.
To use WIA you need to download it from Microsoft (it is a COM server, distributed freely): http://www.microsoft.com/downloads/details.aspx?familyid=a332a77a-01b8-4de6-91c2-b7ea32537e29&displaylang=en.
The next step is to add it as COM object reference in Visual Studio (you need a single file called wiaaut.dll that you need to register with regsvr32). Once you add the reference to WIA COM object in Visual Studio, you get the namespace WIA. All you need to scan image is in this namespace. The most important classes are: Device, Item and CommonDialogClass.
I will not get into more details because developers need code and usually read the text only if the code is not working. Am I right? Did you tread this text?
The above example scans a small area of the page in 300 DPI (color mode), saves the result in PNG format and displays it in a picture box. Download the entire example’s source code: playingwiththescanner.zip.
The interface of WIA is really ugly and is not C# friendly, but that’s the life. Enjoy….
Posted by nakov as .net, news, blog at 1:36 AM EET
Comments Off
I am involved in the teaching and organization of the course “Security and Administration of Oracle Database” which is held for the MSc programs in the Faculty of Mathematics and Informatics (FMI) of Sofia University. The course is part of the MSc program “Information Protection in the Computer Systems and Networks”. The main lecturer in the course Nikolay Manchev is the former Oracle employee with very rich experience with Oracle Database administration and author of a comprehensive book about Oracle Security in 10g and 11g.
Today was our first lecture of the course. The nice thing is that the group of students is small (less than 30 people). The small group of trainees (as it was reported at OpenFest’2009 - see Vasil Kolev’s talk on education at OpenFest) is very important for the effective training. When all people are not much and all of them sit in a relatively small lab, this allows interesting discussions and direct interraction with the lecturers. Most of the students have some experience with databases and SQL so their questions and opinions during the lecture were interesting. I expect very interesting and useful course with exiting experience for both speakers and students.
Posted by nakov as news, blog at 1:01 AM EET
Comments Off
Yesterday I delivered a talk at OpenFest’2009 to share my rich experience in writing free open-source books with a large team authors and editors. Particuarly I presented the methodology, the organizational and management practices I applied during the work on my last successfull project of this kind: the open source book “Introduction to Programming with Java” written in less than 6 months by a team of 30 authors, consisting of 25 chapters and 962 pages. In the presentation and demonstrations I focused on the most important activities and practices that make such projects successfull:
- Defining the scope of the book (list of chapters)
- Creating a detailed guidelines for the authors specifying the writing style and practices
- Defining the templates for each chapter (topic) containing its structure (headings, subheadings and TODOs)
- Conducting the team meeting to assigning a chapter to each of the authors
- Creating a project plan, assigning tasks and deadlines for each author and tracking the work progress
- Managing the authors and working with authors missing their deadlines
- Performing a review of the text
My presentation (in Bulgarian) and all demonstration real world examples are available for download:
Visit the Web site of the book Introduction to Programming with Java to see the result of described book writing methodology: www.introprogramming.info.
Posted by nakov as news, blog at 9:33 PM EET
Comments Off