10 concepts that software engineers cannot understand

Source: Internet
Author: User
Outstanding Software Engineers make good use of design patterns, work hard at code refactoring, write unit tests, and pursue simplicity with religion. In addition, excellent software engineers need to be familiar with 10 concepts, which go beyond programming languages and design patterns and should be understood by software engineers in a wider scope.

10. Relational Database)
Relational databases are widely used because they lack scalability in large-scale Web services. However, relational databases are still the greatest achievement in computer technology in the past 20 years. Relational databases have outstanding performance in processing orders and company data.

The core of a relational database is to record data, which is stored in a database table. The database uses the Query Language (SQL) to search and query data. At the same time, the database associates data tables.

The normalization Technology of databases refers to using the correct method to store data in order to reduce redundancy and speed up access.
 
9. Security)
With the rise of hackers and the rise of data sensitivity, security becomes very important. Security is a broad concept that involves verification, authorization, and information transmission.

Authentication checks the user's identity, such as requiring the user to enter the password. Verification usually requires the combination of SSL (Secure Socket Layer); authorization is very important in the company's business systems, especially some workflow systems. The recently developed oauth protocol can help Web services open relevant information to users. In this way, Flickr Manages access to private photos and data.

Another security field is network fortification, which is related to the operating system, configuration, and monitoring. Not only is the network dangerous, but any software is. Firefox, known as the safest browser, still requires frequent security patches. To write security code for your system, you need to understand various potential problems.
 
8. Cloud computing)
Rww's recent article on cloud computing reaching for the sky through compute clouds illustrates how cloud computing can change the release of large-scale Web applications. Large-scale concurrency, low cost, and fast market input.

Since the invention of parallel algorithms, Grid computing is the first thing to welcome. Grid Computing Uses idle desktop computer resources for parallel computing. The most famous example is the Berkley University's SETI @ Home Program, which uses idle CPU resources to analyze space data. Financial institutions also carry out large-scale grid computing for risk analysis. Idle resources, coupled with the rise of the J2EE platform, ushered in the concept of cloud computing: Application Service Virtualization. That is, the application runs on demand and can change in real time with time and user scale.

The most vivid example of cloud computing is Amazon's Web Service, a group of applications that can be called through APIS, such as cloud service (EC2), a database used to store large media files (S3 ), the Index Service (simpledb) and the sequence Service (SQS ).

7. Concurrency)
Concurrency is the easiest place for software engineers to make mistakes. This is understandable because we have always followed linear thinking, but concurrency is very important in modern systems.

Concurrency is the parallel processing in the program. Most modern programming languages contain built-in concurrency capabilities. In Java, it refers to threads. The most typical example of concurrency is the "production/consumption" mode. The producer produces data and tasks and puts them into the worker thread for consumption or execution. The complexity of concurrency lies in that the thread needs to frequently access the common data, and each thread has its own execution order, but it needs to access the common data. Doug Lea once wrote one of the most complex concurrency classes and is now part of core Java.

6. Cache)
Caching is indispensable for modern web programs. caching is to retrieve data from the database and store data in the memory. Because the cost of direct database access is very high, it is necessary to retrieve data from the database and store it in the cache for access. For example, if you have a website that displays the best-selling books of last week, you can retrieve the best-selling lists from the data and put them in the cache at one time without having to read data from the database every time you access them.

The cache requires a cost. Only the most common content can be put into the cache. Many modern programs, including Facebook, rely on a distributed cache system called memcached, which was developed by Brad firzpatrick while working on the livejournal project, memcached Uses idle memory resources in the Network to establish a cache mechanism. memcached class libraries are available in many popular programming languages, including Java and PHP.

5. hashing)
Hashing aims to accelerate the access speed. If the data is stored in sequence, the time for querying an item from it depends on the size of the data column. The hash method computes a number for each item as an index. Under a good hashing algorithm, the data search speed is the same.

In addition to data storage, the hash method is also important to distributed systems. The uniform Hash (Uniform hash) is used to store data between different computers in the apsaradb environment. Google's Index Service is an embodiment of this method. Every URL is hashed to a specific computer.

Hash Functions are very complex, but modern class libraries all have ready-made classes. What's important is how to fine-tune the hash method for the best performance.

4. algorithm complexity (algorithmic complexity)
Software engineers need to understand the complexity of algorithms. First, Big O notation; second, you should never use nested loops (nested loops in loops). You should use hash tables, array or a single loop. Third, there are many excellent class libraries today, so we don't have to worry too much about the performance differences between these libraries. We will have the opportunity to fine tune them later. Finally, do not ignore the elegance and performance of algorithms. Compact and readable code can make your algorithms simpler and cleaner.

3. layering)
It is easiest to discuss software architecture in layers. John lakos has published a book about large C ++ systems. Lakos believes that software includes layers. The book introduces the concept of layers. The method is to know the complexity of each software component by counting the number of components it depends on.

Lakos believes that a good software has a pyramid structure, that is to say, software components have accumulated layers of complexity, but each component must be simple. A good software contains many small, reusable Modules. Each module has its own responsibilities. In a good system, dependencies between components cannot be crossed. The whole system is stacked with various components to form a pyramid.

Lakos is a pioneer in many aspects of software engineering. The most famous is refactoring ). Code refactoring refers to the constant transformation of code in the programming process to ensure the robustness and flexibility of its structure.

2. Conventions and templates)
Naming Conventions and basic templates are often ignored in programming modes, but they may be the most powerful method. Naming Conventions make software automation possible. For example, Java Beans framework uses simple naming conventions in getter and setter methods. The Del. icio. us website URL naming also uses a unified format, such as a http://del.icio.us/tag/software that takes users to all pages labeled as software.

Many social networks use simple names. For example, if your name is johnsmith, your profile picture may be named johnsmith.jpg, and your RSS aggregate file may be named johnsmith. xml.

Naming conventions are also used for unit tests. For example, the JUnit unit test tool identifies all classes starting with test.

The template we are talking about here is not the constructs in C ++ or Java. We are talking about some template files containing variables, you can replace the variable and output the final result.

Cold fusion is one of the first programs to use the template. Later, java used JSP to implement the template function. Apache recently developed a very useful general template for Java, velocity. PHP itself is based on templates because it supports eval functions.

1. Interface (interfaces)
Interfaces are the most important concepts in software engineering. Any software is a real system model. It is important to use simple user interfaces for modeling. Many software systems go through this extreme, with a lack of abstract lengthy code or overly-designed code that leads to unnecessary complexity.

Among the many software engineering books, Agile programming written by Robert Martin is worth reading.

The following methods are helpful for modeling. First, remove the methods that can only be used in the future. The more refined the code, the better. Second, do not always think that the previous things are correct and be good at changing. Third, be patient and enjoy the process.

International Source:Http://www.readwriteweb.com/archives/top_10_concepts_that_every_software_engineer _

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.