Foundations of programming

Lecture thirteen - Software development in XXI century

Work Plan

  1. Introduction, types of programming languages, pseudo-code
  2. Variables, data types
  3. Pointers and arrays
  4. Simple instructions and tricks
  5. Functions and procedures
  6. Debug
  7. Input / Output
  8. Data structures
  9. Modern C++
  10. Python
  11. Python cont.
  12. Functional / object oriented programming
  13. Software development in XXI century
  14. Final Test during last classes: about 30 open/close questions - mostly closed.

Software developer then and now

image

Software development from XX to XXI century
Who are those guys?

Software developer then

Knowing how to create an optimal algorithms.

Creating desktop applications with IDEs like Visual Studio, Delphi, or Oracle Forms.

If you needed some missing functionality, then you had to develop it on your own.

Relying on your skills and the books on your shelf.

You had to be wise in the ways of mathematics.

Software developer now

Modern software development is about knowing the landscape of tools and libraries as well as using them.

Software development moved from desktop applications to web applications.

Single developer don't possess the knowledge needed to complete the project - Stack Overflow does.

Knowing how to work with big data and parallel computations.

Important to understand existing code and reducing self-written code to the absolute minimum.

Software developer vs software engineer

Software developer takes functional specification and delivers the code required within tight parameters, essentially completing the task in isolation, without understanding or oversight of the project as a whole.

Software engineer is someone who thinks about the design, goes back to the business with questions and suggestions, and thinks about the impact on the business and the end user.

Back-end developer

Back end development refers to the server side of an application and everything that communicates between the database and the user.

This type of web development usually consists of three parts: a server, an application, and a database.

Back end languages include Java, PHP, Ruby on Rails, Python, and .Net.

Front-end developer

Front end development manages everything that users visually see first in their browser or application. It might be the website, the web app or a mobile app.

Front end developers are responsible for the look and feel of a site.

Front end languages include HTML, CSS, and Javascript. The two main front end JavaScript frameworks in the market today are AngularJS by Google and ReactJS by Facebook.

Mobile developer

Mobile developers are a type of software developer.

They specialise in mobile technology such as building apps for Google’s Android, Apple’s iOS and Microsoft’s Windows Phone platforms.

Mobile developers learn the programming languages and software development environment for their chosen platform.

Languages of mobile developers are: Java or Kotlin for Android, Objective-C or Swift for iOS and C# for Windows Phone.

More than 60% of web traffic now comes from mobile devices, and 25% of Americans use only mobile devices to access the internet.

UX/UI

UI (User Interface) and UX (User Experience).

UX designer focus on the user’s usability while UI designer focuses on user’s graphic impression.

UI Responsibilities: look and feel, responsiveness and interactive image,

UX Responsibilities: strategy and content, designing flow and prototyping, execution and analytics,

UX tools are prototyping software (Appcooker, Sketch), user testing apps , HTML5, CSS, JavaScript, Jquery.

UI should know graphic programs, basics of HTML5, CSS, JavaScript.

Dev-ops (development and operations)

Originally DevOps was a philosophy that promotes cooperation between software developers and operations managers.

DevOps has its roots in Agile, but it is relevant for applications developed in all methodologies.

DevOps is a system administrators participating in an agile development process.

DevOp role is to design and improve automated tools for systems management and monitoring, deploy releases and maintain services.

QA

QA (Quality Assurance) or QE (Quality Engineering) engineer,

The QA role involves the tasks such as understanding of the software product features & domain knowledge, writing test plans, writing test specifications, manual execution of tests and interpreting results.

Also automated tests, automated execution and generation of final results summary for release level regression testing.

Need average coding skills in programming languages such as, Java, C++, Python, SQL, and XML.

Specialist

Machine learning - programmers who develop machines and systems that can learn and apply knowledge without specific direction. Needed: Sci-kit Learn, Tensorflow, MXnet.

Big data specialist - management, administration and enhancements to systems based on big data architecture. Needed: Hadoop, Spark, MapReduce, ETL tools.

Other: Distributed Systems Engineer, Data Scientists, Research and Development, System architect.

Full-stack developer

Full Stack Developer is someone with familiarity in each layer of technology stack.

That means Front-end Development + Back-end Development + DevOps + Design..

Popularize by Facebook in terms of PHP developers.

"Jack of All Trades but a Master of None".

Modern applications elements

image

Languages

image

Technology stack

Technology stack composite the layers of components or services that are used to provide a software solution or application.

A stack is created when one layer of application is built atop the other, with the help of codes and hardware modules ranging from generic to specific.

image

Choosing technology stack

image

Technology stacks

image

image

image

image

Technology stacks

PHP: Facebook Python: Instagram, Pinterest, Reddit Ruby: 500px, Groupon, Airbnb Java: Ebay, Amazon, Alibaba C#: Guru, Stack Overflow, Bank of America JS: LinkedIn, Walmart, PayPal

Programming Languages

PHP is used for simple and medium-level projects and it contains a lot of boxed solutions. PHP is rather an inexpensive technology with a broad global developer community.

Python is a modern language that provides fast and quality programming. It's mainly used on medium-level and large projects. However, Python developers are not that many and are quite expensive.

Ruby is a fast modern language that's mainly used on simple and medium-level projects and that's so much favorited by startups. Developer community is scarce and cost of development is high.

Java is a hardcore language that's very expensive and slow in development. It's mainly used on projects with some very specific and sophisticated requirements.

C# is close to Java and is used on complex projects such as FinTech.

JavaScript (JS) is the latest trend in software programming. It's used extensively on all types of projects including game development.

Languages

image

GitHub

image

Jobs

image

Salaries

image

Software process

Software process must include the following four activities:
Software specification (or requirements engineering): Define the main functionalities of the software and the constrains around them. Software design and implementation: The software is to be designed and programmed. Software verification and validation: The software must conforms to it’s specification and meets the customer needs. Software evolution (software maintenance): The software is being modified to meet customer and market requirements changes.

Development process

Software development process is the process of dividing software development work into distinct phases to improve design, product management, and project management.

Practices:
Continuous integration Prototyping Incremental development Rapid application development

Methodologies

Agile Development Processes:

Scrum - Cyclic and iterative, rather than phase-oriented — planning and implementation are concurrent, so while the team is busy building, they’re also planning for the future.
XP, Lean

Plan-Driven Methodologies:

Waterfall - The waterfall model is a sequential development approach, in which development is seen as flowing steadily downwards (like a waterfall) through several phases,
PRINCE, RUP

TDD

Test-driven development (TDD) is a software development process that relies on the repetition of a very short development cycle: Requirements are turned into very specific test cases, then the software is improved to pass the new tests, only. This is opposed to software development that allows software to be added that is not proven to meet requirements.

Cycle:
Add a test Run all tests and see if the new test fails Write the code Run tests Refactor code

Final exam

Test:
about 30 questions, 2 groups, Closed questions + open (code) questions, 1h ?? depends on the size of the group?. Material from all lectures including: Error Types youtube presentation, excluding: debugging, regular expressions, this lecture Expect results on 31st of january.

Final exam

Marking:
5 : 90%-100% 4,5 : 80%-90% 4 : 70%-80% 3,5 : 60%-70% 3 : 50%-60% 2 : <50%

Test example (easy)

Python is:

  1. an Hybrid language
  2. Interpreted Language,
  3. a Compiled language,

Test example (medium)

The Symbol "?:" represents in C/C++ :

  1. Keyword,
  2. Operator,
  3. Statement,

Test example (hard)

In given example @xxx define:

@xxx
def foo(x):
    print("Hi, foo has been called with " + str(x))
  1. Decorator,
  2. Generator,
  3. Lambda,
  4. Annotation,

Code question example (easy)

What is the output of this program?

#include <iostream>
using namespace std;
int main ()
{
    int a, b;         
    a = 10;           
    b = 4;            
    a = b;           
    b = 7;           
    cout << "a:";
    cout << a;
    cout << " b:";
    cout << b;
    return 0;
}
  1. Answer a:4 b:7

Code question example (medium)

What is the output of this program?

#include <iostream>
using namespace std;
int main()
{
    int a = 0;
    int b = 10;
    if ( a && b )
    {
        cout << "true"<< endl ;
    }
    else
    {
        cout << "false"<< endl ;
    }
    return 0;
}
  1. Answer false

Code question example (hard)

What is the output of this program?

#include <iostream>
using namespace std;
int main()
{
    int i, j;
    j = 10;
    i = (j++, j + 100, 999 + j);
    cout << i;
    return 0;
}
  1. Answer 1010

References

https://www.siliconrepublic.com/advice/software-developer-software-engineer-liberty-it

https://www.coursereport.com/blog/front-end-development-vs-back-end-development-where-to-start

https://www.rainerhahnekamp.com/en/modern-software-development/

https://www.upwork.com/hiring/development/choosing-the-right-software-stack-for-your-website/

http://ddi-dev.com/blog/programming/how-choose-technology-stack-web-application-development/

https://intersog.com/blog/tech-tips/how-to-choose-the-right-tech-stack-for-your-software-development-project/

https://www.cprime.com/2012/09/project-management-agile-methodologies/