Artikel ini ditulis sebagai tanggapan terhadap artikel antipode yang diterbitkan sebelumnya.

Selama dua tahun terakhir ditambah, saya telah menggunakan Go untuk mengimplementasikan server RADIUS khusus dengan sistem penagihan yang dikembangkan. Dalam prosesnya, saya mempelajari seluk-beluk bahasa itu sendiri. Program-program itu sendiri sangat sederhana dan bukan tujuan menulis artikel, tetapi pengalaman menggunakan Go sendiri layak untuk mengatakan beberapa kata dalam pembelaannya. Go menjadi bahasa yang semakin populer untuk kode yang serius dan dapat diskalakan. Bahasa dibuat di Google, di mana ia digunakan secara aktif. Untuk meringkas, saya dengan tulus percaya bahwa desain bahasa Go buruk untuk programmer bodoh.
Dirancang untuk programmer yang lemah?
Lemah bicara tentang masalah. Pembicaraan yang kuat tentang ide dan impian ...
Go sangat sederhana untuk dipelajari, sangat sederhana sehingga Anda dapat membaca kode dengan sedikit atau tanpa persiapan sama sekali. Fitur bahasa ini digunakan di banyak perusahaan dunia ketika kode dibaca bersama dengan spesialis non-inti (manajer, pelanggan, dll.). Ini sangat nyaman untuk metodologi seperti Desain Berbasis Pengembangan.
Bahkan programmer pemula mulai menghasilkan kode yang lumayan setelah satu atau dua minggu. Buku yang saya pelajari Go disebut “Go Programming” (ditulis oleh Mark Summerfield). Buku ini sangat bagus, menyentuh banyak nuansa bahasa. Setelah bahasa rumit yang tidak perlu seperti Java, PHP, kurangnya sihir menyegarkan. Tetapi cepat atau lambat, banyak programmer terbatas memiliki keinginan untuk menggunakan metode lama di bidang baru. Apakah ini benar-benar perlu?
Rob Pike (ahli ideologi utama bahasa) menciptakan Go sebagai bahasa industri yang mudah dibaca, efektif digunakan. Bahasa ini dirancang untuk produktivitas maksimum dalam tim besar dan tidak ada keraguan tentang hal itu. Banyak programmer pemula mengeluh bahwa ada banyak fitur yang kurang. Keinginan untuk kesederhanaan ini adalah keputusan sadar dari pengembang bahasa, dan untuk memahami sepenuhnya untuk apa, kami perlu memahami motivasi pengembang dan apa yang mereka capai di Go.
Jadi mengapa itu dibuat sangat sederhana? Berikut beberapa kutipan dari Rob Pike:
Poin kunci di sini adalah bahwa programmer kami bukan peneliti. Mereka biasanya masih sangat muda, datang kepada kami sepulang sekolah, mungkin mereka belajar Java, atau C / C ++, atau Python. Mereka tidak dapat memahami bahasa yang luar biasa, tetapi pada saat yang sama, kami ingin mereka membuat perangkat lunak yang baik. Itu sebabnya bahasa harus mudah dipahami dan dipelajari.
Dia harus terbiasa, secara kasar berbicara seperti C. Pemrogram Google memulai karier mereka lebih awal dan sebagian besar terbiasa dengan bahasa prosedural, khususnya keluarga C. Persyaratan untuk produktivitas cepat dalam bahasa pemrograman baru berarti bahasanya tidak boleh terlalu radikal.
Kata-kata bijak, bukan?
Artefak Kesederhanaan
Kesederhanaan adalah syarat penting bagi yang cantik. Leo Tolstoy.
Menjadi sederhana adalah salah satu aspirasi terpenting dalam desain apa pun. Seperti yang Anda ketahui, proyek yang sempurna bukanlah proyek di mana tidak ada yang perlu ditambahkan, tetapi satu - yang darinya tidak ada yang dihapus. Banyak yang percaya bahwa untuk menyelesaikan (atau bahkan mengekspresikan) tugas yang kompleks, diperlukan alat yang kompleks. Namun, ini tidak benar. Ambil contoh bahasa PERL. Para ahli ideologi bahasa percaya bahwa seorang programmer harus memiliki setidaknya tiga cara berbeda untuk menyelesaikan satu masalah. Para ahli ideologi bahasa Go pergi dengan cara yang berbeda, mereka memutuskan bahwa untuk mencapai tujuan, satu cara sudah cukup, tetapi sangat bagus. Pendekatan ini memiliki dasar yang serius: satu-satunya cara adalah lebih mudah untuk dipelajari dan lebih sulit untuk dilupakan.
Banyak migran mengeluh bahwa bahasa tersebut tidak mengandung abstraksi yang elegan. Ya, memang, tapi ini adalah salah satu kelebihan utama bahasa tersebut. Bahasa ini mengandung minimum sihir - oleh karena itu, tidak diperlukan pengetahuan mendalam untuk membaca program ini. Adapun verbositas kode, ini bukan masalah sama sekali. Program Golang yang ditulis dengan baik dibaca secara vertikal dengan sedikit atau tanpa penataan. Selain itu, kecepatan membaca suatu program setidaknya merupakan urutan besarnya lebih cepat daripada tulisannya. Jika Anda menganggap bahwa semua kode memiliki format seragam (dilakukan dengan menggunakan perintah gofmt bawaan), maka membaca beberapa baris tambahan bukanlah masalah sama sekali.
Tidak terlalu ekspresif
Seni tidak menoleransi ketika membatasi kebebasannya. Akurasi bukan tanggung jawabnya.
Karena keinginan untuk kesederhanaan, Go tidak memiliki konstruksi yang dalam bahasa lain dianggap sebagai sesuatu yang alami bagi orang yang terbiasa dengan mereka. Pada awalnya, ini mungkin agak merepotkan, tetapi kemudian Anda perhatikan bahwa program ini dibaca berkali-kali lebih mudah dan lebih pasti.
Misalnya, utilitas konsol yang membaca stdin atau file dari argumen baris perintah akan terlihat seperti ini:
package main import ( "bufio" "flag" "fmt" "log" "os" ) func main() { flag.Parse() scanner := newScanner(flag.Args()) var text string for scanner.Scan() { text += scanner.Text() } if err := scanner.Err(); err != nil { log.Fatal(err) } fmt.Println(text) } func newScanner(flags []string) *bufio.Scanner { if len(flags) == 0 { return bufio.NewScanner(os.Stdin) } file, err := os.Open(flags[0]) if err != nil { log.Fatal(err) } return bufio.NewScanner(file) }
Meskipun solusi untuk masalah yang sama dalam bahasa D terlihat sedikit lebih pendek, bagaimanapun, tidak mudah untuk dibaca
import std.stdio, std.array, std.conv; void main(string[] args) { try { auto source = args.length > 1 ? File(args[1], "r") : stdin; auto text = source.byLine.join.to!(string); writeln(text); } catch (Exception ex) { writeln(ex.msg); } }
Salin neraka
Manusia membawa neraka dalam dirinya sendiri. Martin Luther.
Para pemula selalu mengeluh tentang Go dalam hal kurangnya obat generik. Untuk mengatasi masalah ini, kebanyakan dari mereka menggunakan penyalinan kode langsung. Sebagai contoh, para profesional yang kurang beruntung tersebut percaya bahwa fungsi untuk meringkas daftar bilangan bulat tidak dapat diimplementasikan dengan cara lain selain dengan menyalin-tempel sederhana untuk setiap tipe data.
package main import "fmt" func int64Sum(list []int64) (uint64) { var result int64 = 0 for x := 0; x < len(list); x++ { result += list[x] } return uint64(result) } func int32Sum(list []int32) (uint64) { var result int32 = 0 for x := 0; x < len(list); x++ { result += list[x] } return uint64(result) } func main() { list32 := []int32{1, 2, 3, 4, 5} list64 := []int64{1, 2, 3, 4, 5} fmt.Println(int32Sum(list32)) fmt.Println(int64Sum(list64)) }
Bahasa memiliki sarana yang cukup untuk mengimplementasikan konstruksi tersebut. Sebagai contoh, pemrograman umum baik-baik saja.
package main import "fmt" func Eval32(list []int32, fn func(a, b int32)int32) int32 { var res int32 for _, val := range list { res = fn(res, val) } return res } func int32Add(a, b int32) int32 { return a + b } func int32Sub(a, b int32) int32 { return a - b } func Eval64(list []int64, fn func(a, b int64)int64) int64 { var res int64 for _, val := range list { res = fn(res, val) } return res } func int64Add(a, b int64) int64 { return a + b } func int64Sub(a, b int64) int64 { return a - b } func main() { list32 := []int32{1, 2, 3, 4, 5} list64 := []int64{1, 2, 3, 4, 5} fmt.Println(Eval32(list32, int32Add)) fmt.Println(Eval64(list64, int64Add)) fmt.Println(Eval64(list64, int64Sub)) }
Dan, meskipun kode kami ternyata agak lebih panjang dari kasus sebelumnya, itu menjadi umum. Oleh karena itu, tidak akan sulit bagi kita untuk menerapkan semua operasi aritmatika.
Banyak yang akan mengatakan bahwa program D terlihat jauh lebih pendek dan benar.
import std.stdio; import std.algorithm; void main(string[] args) { [1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln; }
Namun, ini hanya lebih pendek, tetapi tidak lebih benar, karena masalah penanganan kesalahan sepenuhnya diabaikan dalam implementasi D.
Dalam kehidupan nyata, ketika kompleksitas logika meningkat, kesenjangannya dengan cepat menyempit. Bahkan lebih cepat, kesenjangan dipersempit ketika diperlukan tindakan yang tidak dapat dilakukan menggunakan operator bahasa standar.
Dalam hal dukungan, ekstensibilitas, keterbacaan, menurut pendapat saya, bahasa Go menang, meskipun hilang dalam verbositas.
Pemrograman umum dalam beberapa kasus memberi kita manfaat yang tidak dapat disangkal. Ini dengan jelas menggambarkan paket sortir. Jadi, untuk mengurutkan daftar apa pun, cukup bagi kita untuk mengimplementasikan antarmuka sort.Interface.
import "sort" type Names []string func (ns Names) Len() int { return len(ns) } func (ns Names) Less(i, j int) bool { return ns[i] < ns[j] } func (ns Names) Swap(i, j int) { ns[i], ns[j] = ns[j], ns[i] } func main() { names := Names{"London", "Berlin", "Rim"} sort.Sort(names) }
Jika Anda mengambil proyek open source dan menjalankan perintah grep "interface {}" -R, Anda akan melihat seberapa sering antarmuka bingung digunakan. Rekan-rekan yang berpikiran sempit akan segera mengatakan bahwa semua ini adalah karena kurangnya obat generik. Namun, ini jauh dari selalu terjadi. Ambil contoh bahasa DELPHI. Meskipun memiliki generik yang sama, ini berisi tipe VARIAN khusus untuk operasi dengan tipe data arbitrer. Go melakukan hal yang sama.
Dari pistol burung pipit
Dan jaket harus sesuai dengan ukuran kegilaan. Stanislav Mari.
Banyak penggemar olahraga ekstrim dapat mengatakan bahwa Go memiliki mekanisme lain untuk membuat obat generik - refleksi. Dan mereka akan benar ... tetapi hanya dalam kasus yang jarang terjadi.
Rob Pike memperingatkan kita:
Ini adalah alat yang ampuh yang harus digunakan dengan hati-hati. Ini harus dihindari sampai benar-benar diperlukan.
Wikipedia memberi tahu kami hal berikut:
Refleksi berarti proses di mana suatu program dapat melacak dan memodifikasi struktur dan perilakunya sendiri pada saat runtime. Refleksi yang mendasari paradigma pemrograman disebut pemrograman refleksif. Ini adalah jenis metaprogramming.
Namun, seperti yang Anda tahu, Anda harus membayar semuanya. Dalam hal ini adalah:
- kesulitan menulis program
- kecepatan eksekusi program
Oleh karena itu, refleksi harus digunakan dengan hati-hati, sebagai senjata kaliber besar. Penggunaan refleksi tanpa berpikir menyebabkan program yang tidak dapat dibaca, kesalahan konstan dan kecepatan rendah. Persisnya adalah bahwa programmer sombong bisa memamerkan kodenya di depan rekan-rekan lain yang lebih pragmatis dan sederhana.
Bagasi budaya dari C? Tidak, dari sejumlah bahasa!
Seiring dengan negara, ahli waris dibiarkan dengan hutang.
Terlepas dari kenyataan bahwa banyak yang percaya bahwa bahasa sepenuhnya didasarkan pada warisan C, ini tidak begitu. Bahasa telah memasukkan banyak aspek dari bahasa pemrograman terbaik.
Sintaks
Pertama-tama, sintaks konstruksi gramatikal didasarkan pada sintaksis bahasa C. Namun, bahasa DELPHI juga memiliki dampak yang signifikan. Jadi, kita melihat bahwa tanda kurung berlebih dihapus sepenuhnya, sehingga sangat mengurangi keterbacaan program. Juga, bahasa tersebut berisi operator :: =, yang melekat dalam bahasa DELPHI. Konsep paket dipinjam dari bahasa seperti ADA. Pernyataan entitas yang tidak digunakan dipinjam dari bahasa PROLOG.
Semantik
Semantik bahasa DELPHI diambil sebagai dasar paket. Setiap paket merangkum data dan kode dan berisi entitas swasta dan publik. Ini memungkinkan Anda untuk mengurangi antarmuka paket ke minimum.
Operasi implementasi dengan metode delegasi dipinjam dari DELPHI.
Kompilasi
Tidak heran ada lelucon: Go dikembangkan saat program C disusun. Salah satu kelebihan bahasa ini adalah kompilasi yang sangat cepat. Gagasan itu dipinjam dari DELPHI. Selain itu, setiap paket Go sesuai dengan modul DELPHI. Paket-paket ini dikompilasi ulang hanya jika diperlukan. Oleh karena itu, setelah pengeditan berikutnya, tidak perlu mengkompilasi seluruh program, tetapi cukup mengkompilasi ulang hanya paket dan paket yang diubah tergantung pada paket yang diubah ini (dan itu hanya jika antarmuka paket telah berubah).
Desain tingkat tinggi
Bahasa tersebut mengandung banyak konstruksi tingkat tinggi yang berbeda yang sama sekali tidak terkait dengan bahasa tingkat rendah seperti C.
- Garis
- Hash meja
- Irisan
- Mengetik bebek dipinjam dari bahasa seperti RUBY (yang, sayangnya, banyak yang tidak mengerti dan tidak menggunakan potensi penuh mereka).
Manajemen memori
Manajemen memori umumnya layak mendapatkan artikel terpisah. Jika dalam bahasa seperti C ++, kontrol sepenuhnya diserahkan kepada pengembang, maka dalam bahasa selanjutnya seperti DELPHI, model penghitungan referensi digunakan. Dengan pendekatan ini, tautan siklik tidak diizinkan, karena kluster yang hilang terbentuk, maka deteksi kluster tersebut (seperti dalam C #) adalah bawaan untuk Go. Selain itu, pengumpul sampah lebih efektif daripada kebanyakan implementasi yang dikenal saat ini dan sudah dapat digunakan untuk banyak tugas waktu nyata. Bahasa itu sendiri mengenali situasi ketika nilai untuk menyimpan variabel dapat dialokasikan pada stack. Ini mengurangi beban pada manajer memori dan meningkatkan kecepatan program.
Konkurensi dan Persaingan
Paralelisme dan daya saing bahasa tidak bisa dipuji. Tidak ada bahasa tingkat rendah yang dapat bersaing jarak jauh dengan bahasa Go. Dalam keadilan, perlu dicatat bahwa model itu tidak ditemukan oleh penulis bahasa, tetapi hanya meminjam dari bahasa ADA lama yang baik. Bahasa ini mampu memproses jutaan koneksi paralel menggunakan semua CPU, sementara pada urutan besarnya kurang umum untuk masalah kompleks kode multithreaded dengan kebuntuan dan kondisi balapan.
Manfaat tambahan
Jika ini bermanfaat, semua orang akan menjadi tidak mementingkan diri sendiri.
Bahasa ini juga memberi kita sejumlah manfaat yang tidak diragukan:
- Satu-satunya file yang dapat dieksekusi setelah membangun proyek sangat menyederhanakan penerapan aplikasi.
- Pengetikan statis dan jenis inferensi dapat secara signifikan mengurangi jumlah kesalahan dalam kode bahkan tanpa tes menulis. Saya tahu beberapa programmer yang tidak menulis tes sama sekali dan pada saat yang sama kualitas kode mereka tidak terlalu menderita.
- Kompilasi silang yang sangat sederhana dan portabilitas yang luar biasa dari perpustakaan standar, yang sangat menyederhanakan pengembangan aplikasi lintas platform.
- Ekspresi reguler RE2 aman untuk thread dan memiliki runtime yang dapat diprediksi.
- Pustaka standar yang kuat, yang memungkinkan sebagian besar proyek untuk dilakukan tanpa kerangka kerja pihak ketiga.
- Bahasa ini cukup kuat untuk berkonsentrasi pada masalah, dan bukan pada metode untuk menyelesaikannya, dan pada saat yang sama cukup rendah sehingga masalah dapat diselesaikan secara efisien.
- Sistem Go eco sudah berisi alat out-of-the-box untuk semua kesempatan: tes, dokumentasi, manajemen paket, linter kuat, pembuatan kode, detektor kondisi lomba, dll.
- Go versi 1.11 sekarang memiliki manajemen ketergantungan semantik bawaan yang dibangun di atas host VCS populer. Semua alat yang membentuk ekosistem Go menggunakan layanan ini untuk mengunduh, mengkompilasi, dan menginstal kode dari mereka dalam satu gerakan. Dan itu luar biasa. Dengan munculnya versi 1.11, masalah dengan versi paket juga sepenuhnya terselesaikan.
- Karena ide utama bahasa adalah untuk mengurangi sihir, bahasa mendorong pengembang untuk secara eksplisit menangani penanganan kesalahan. Dan ini benar, karena jika tidak, ia akan lupa tentang penanganan kesalahan sama sekali. Hal lain adalah bahwa sebagian besar pengembang sengaja mengabaikan penanganan kesalahan, lebih memilih alih-alih meneruskan kesalahan daripada memprosesnya.
- Bahasa tidak menerapkan metodologi OOP klasik, karena tidak ada virtualitas dalam bentuk murni di Go. Namun, ini bukan masalah saat menggunakan antarmuka. Tidak adanya OOP secara signifikan mengurangi hambatan masuk untuk pemula.
Kemudahan untuk Manfaat Masyarakat
Merumitkan itu sederhana, menyederhanakan itu sulit.
Go dirancang agar sederhana dan unggul dalam hal itu. Itu ditulis untuk programmer pintar yang memahami semua kebajikan dari kerja tim dan bosan dengan variabilitas tak berujung dari bahasa tingkat perusahaan. Memiliki seperangkat konstruksi sintaksis yang relatif kecil dalam arsenalnya, secara praktis tidak mengalami perubahan dari waktu ke waktu, oleh karena itu, pengembang telah meluangkan banyak waktu khusus untuk pengembangan, dan bukan untuk studi inovasi bahasa yang tiada akhir.
Perusahaan juga mendapatkan sejumlah keuntungan: ambang masuk yang rendah memungkinkan Anda menemukan spesialis dengan cepat, dan ketidakberdayaan bahasa memungkinkan Anda menggunakan kode yang sama setelah 10 tahun.
Kesimpulan
Ukuran otak yang besar belum membuat seekor gajah pun menjadi penerima Hadiah Nobel.
Bagi para programmer yang egonya lebih unggul daripada semangat tim, juga para teoretikus yang menyukai tugas-tugas akademis dan "peningkatan diri" yang tak ada habisnya, bahasanya sangat buruk, karena itu adalah bahasa pengerjaan serba guna yang tidak memungkinkan untuk menerima kesenangan estetika dari hasil pekerjaan mereka dan menunjukkan diri mereka sendiri seorang profesional di depan rekan kerja (asalkan kita mengukur pikiran secara tepat dengan kriteria ini, dan bukan dengan koefisien IQ). Seperti segala sesuatu dalam hidup, ini adalah masalah prioritas pribadi. Seperti semua inovasi berharga, bahasa telah datang jauh dari penolakan universal ke pengakuan massa. Bahasa itu cerdik dalam kesederhanaannya, tetapi, seperti yang Anda tahu, semua yang cerdik itu sederhana!
Ringkasan
Di antara semua kritik keras yang ditujukan pada Go, pernyataan-pernyataan berikut sangat menonjol:
- Tidak ada obat generik. Jika kita melihat statistik dari bahasa yang paling populer, kita perhatikan bahwa setengah dari sepuluh bahasa teratas tidak memiliki generik. Sebagian besar, obat generik hanya diperlukan dalam wadah. Karena itu, keuntungan dari mereka tidak terlalu besar.
- Bahasa lain seperti Rust jauh lebih baik (setidaknya dalam kategori situs XXX). Sekali lagi, jika kita melihat statistik dari bahasa yang paling populer, maka kita tidak akan menemukan Karat dalam daftar sama sekali, atau itu akan berada di suatu tempat di bawah peringkat. Secara pribadi, saya suka Rust, tetapi saya memilih Go.
- XXX memiliki roti seperti itu. Ini adalah sisi lain dari koin kesederhanaan. Apakah itu merugikan atau tidak, semua orang harus memutuskan. Namun, pengembang proyek memberikan preferensi mereka demi kesederhanaan.
- Mereka akan merilis Go 2.0, maka kita akan lihat. Posisi ini diambil oleh pengamat, bukan praktisi.
- Tidak cukup ekspresif. Saya setuju, di beberapa bidang ekspresif timpang, tetapi secara umum itu adalah bahasa yang sederhana dan konsisten. Selain itu, karena kemiskinan bahasa, kami terpaksa lebih memperhatikan arsitektur aplikasi yang dikembangkan, yang secara positif mempengaruhi fleksibilitasnya.
Sebenarnya, artikel itu tidak memikirkan keuntungan sintaksis dari bahasa Go, melainkan sebagai tinjauan singkat tentang kelebihannya untuk kerja tim dan evolusi efektif proyek yang sedang dikembangkan. Dipahami bahwa artikel itu akan berlanjut, sehubungan dengan masalah yang lebih spesifik. Namun, karena kurangnya minat pada topik, kemungkinan besar tidak akan ada kelanjutan.
Eksperimen
Jangan percaya kata-kata - baik milik Anda maupun orang asing, tetapi percayalah pada perbuatan - baik milik Anda maupun orang asing.
Bagian terakhir dimaksudkan secara eksklusif untuk kategori orang yang menganggap diri mereka optimis yang berpikiran konstruktif dan yang dapat mengkonfirmasi hal ini dengan urusan mereka sendiri. Sisa audiens, silakan lewati bagian ini.
Eksperimen ini diinspirasi oleh teman-teman yang mengklaim bahwa semua optimis yang berpikiran konstruktif telah lama meninggalkan (setidaknya secara virtual) hamparan negara kita dan menetap, misalnya, di Stack Overflow, dan di sini sebagian besar orang sok tetap. Untuk waktu yang lama saya tidak mempercayai mereka, jadi saya memutuskan untuk melakukan percobaan ini.
Beberapa artikel dipasang di hub, hasil analisis dari komentar yang saya kutip.
- Memang, hipotesis teman saya dikonfirmasi, namun, orang yang memadai masih ditemukan di antara pedagang asongan, meskipun persentase mereka turun dengan cepat. Yuri Bykov menyebut orang-orang seperti itu " bodoh " yang menjadi sandaran seluruh negara. Menurutnya, persentasenya kecil (sekitar 2%). Saya tidak terlalu pesimis dan saya pikir ada lebih banyak dari mereka.
- Hukum media. Informasi yang merusak jauh lebih menarik daripada informasi yang membangun.
- Psikologi orang banyak. Ini adalah hal yang mengerikan, bahkan membuat domba yang kasar keluar dari orang yang memadai. Seorang pria di tengah kerumunan bukan lagi seorang pria. Tidak ada pembicaraan tentang obyektivitas. Tidak ada argumen logis, tidak ada sumber otoritatif atau preseden tidak lagi memengaruhinya.
- Tanggung jawab dan impunitas. Orang-orang mau mempermalukan orang lain untuk meninggikan diri mereka sendiri (setidaknya di mata mereka sendiri). Terutama jika Anda tidak harus menjawabnya (yang bisa lebih mudah - mengklik tanda minus dan Anda bahkan tidak perlu menulis komentar). Ada banyak kesamaan antara kata dan perbuatan seperti halnya antara saluran dan saluran pembuangan.
- Kesombongan. Sebagian besar orang sombong siap tampil menonjol dengan cara apa pun. Mereka tidak takut akan hambatan moral.
- Pesimisme Tidak seperti negara-negara Barat (dan terutama Amerika), sentimen pesimistis berlaku di negara itu. Seperti yang Anda tahu, seorang optimis mencari peluang di tengah kesulitan, dan pesimis mencari kesulitan di tengah peluang. Di negara kita, hampir tidak ada yang memperhatikan kualitas positif dari apa pun.
- Profesionalisme dan pandangan dunia. Kebanyakan orang memilih alat sebagai tujuan dalam diri mereka sendiri, dan bukan sebagai alat untuk mencapai tujuan. Orang-orang lupa bagaimana bekerja dengan informasi. Orang tidak melihat hutan di belakang pohon. Dari berbagai informasi, mereka tidak dapat mengekstraksi pemikiran utama. Tidak seorang pun ingin melihat dari sudut pandang yang berbeda, bukan standar untuk diri mereka sendiri. Perbedaan pendapat ditekan. Itu tidak diterima di sini.
- Keramahan dan hormat. Kelompok ramah yang dipuji hanya ada dalam kata-kata. Nilai pengembangan lincah hanya di atas kertas.
- Kemunafikan. Anda dapat menulis artikel terpisah tentang ini secara umum.
- Prinsip Ada orang yang mengajukan pertanyaan yang tepat: “ Apa yang saya lakukan? Namun, tidak semua orang mengerti bahwa, karena kurangnya prinsip, bagi kita, kepentingan diri sendiri yang sesaat lebih penting daripada semua prinsip kita digabungkan. Paling mudah untuk menyalahkan segala sesuatu pada keadaan dan mengatakan bahwa tidak ada yang tergantung pada kita.
Dengan rasa hormat dan simpati yang mendalam kepada semua optimis yang berpikiran konstruktif.
Adverax