CodeGym /จาวาบล็อก /สุ่ม /การเลือกภาษาโปรแกรม
John Squirrels
ระดับ
San Francisco

การเลือกภาษาโปรแกรม

เผยแพร่ในกลุ่ม
ฉันพบการเขียนโปรแกรมครั้งแรกที่โรงเรียนในบทเรียนเกี่ยวกับวิทยาการคอมพิวเตอร์ สิ่งเหล่านี้ประกอบด้วยคำอธิบายที่น่าเบื่อหน่ายว่าระบบเลข n-ary ทำงานอย่างไร และแน่นอนว่ามีการทดสอบที่กำหนดให้คุณต้องเขียนเว็บไซต์ของคุณเอง ในเวลานั้น สำหรับฉันแล้ว ดูเหมือนว่าไม่มีอาชีพใดที่น่าเบื่อไปกว่านี้อีกแล้ว ฉันผิดแค่ไหน! น่าเสียดายที่โปรแกรมวิทยาการคอมพิวเตอร์ระดับมัธยมศึกษาตอนปลายไม่ได้ให้ภาพที่สมบูรณ์ของงานด้านไอที และไม่ได้อธิบายถึงวิธีการเลือกภาษาโปรแกรม ก่อนที่จะถามว่า "ฉันควรเรียนรู้ภาษาโปรแกรมใด" ผู้เริ่มต้นควรทำความคุ้นเคยกับภาษาที่มีอยู่และความแตกต่างระหว่างกัน การเลือกภาษาโปรแกรม - 1

เกณฑ์การเข้า: สูง, ต่ำ, กลาง

โปรแกรมเมอร์มักจะพูดถึง "เกณฑ์การเข้าเรียน" ซึ่งเป็นแนวคิดที่สะท้อนถึงความพยายามที่จำเป็นสำหรับ "นักพัฒนารุ่นเยาว์" ที่ต้องการเพื่อให้เชี่ยวชาญภาษาโปรแกรมได้ดีพอที่จะเขียนโปรแกรมอย่างจริงจังเป็นครั้งแรกและหางานทำ "เกณฑ์การเข้า" ประกอบด้วยความรู้เกี่ยวกับ:
  • ลักษณะเฉพาะของวากยสัมพันธ์และความแตกต่างของภาษา
  • ห้องสมุด
  • อัลกอริทึมและโครงสร้างข้อมูล
การทำงานใน Excel อาจเรียกได้ว่าเป็นการเขียนโปรแกรมชนิดหนึ่ง อย่างไรก็ตาม โปรแกรมสำนักงานที่คุ้นเคยนี้ไม่ง่ายอย่างที่คิด สำหรับผู้ใช้รายหนึ่ง เกณฑ์รายการอาจเป็นความสามารถในการสร้างตาราง อีกประการหนึ่ง อาจเป็นความรู้เกี่ยวกับสูตรและมาโครที่ซับซ้อน ไม่ว่าในกรณีใด เกณฑ์นี้มีขนาดเล็ก ถัดมาคือกึ่งภาษา เช่น1C -programming จากนั้นมีภาษาที่ง่ายที่สุดในการเรียนรู้เช่นPHP นอกจากนี้ เรายังมีภาษาที่มีไวยากรณ์ดั้งเดิม (มักจะมาจาก ภาษาอังกฤษ) ที่ไม่ต้องการให้คุณจัดการกับการจัดการหน่วยความจำ เช่นJavaและJS จากนั้นมีภาษาที่ต้องใช้การจัดการหน่วยความจำ โครงสร้างข้อมูล และอัลกอริทึมอย่างระมัดระวังเป็นพิเศษ เช่น ภาษาซีและซี++ . ภาษาหลายกระบวนทัศน์รุ่นเยาว์ เช่นScalaอาจมีเกณฑ์การเข้าใช้งานที่สูงที่สุด เนื่องจากการเรียนรู้ภาษาเหล่านั้นให้เชี่ยวชาญนั้น คุณจะต้องดำดิ่งลงไปในกระบวนทัศน์การเขียนโปรแกรมจำนวนมาก แต่ก่อนที่คุณจะเลือกภาษา คุณควรตัดสินใจว่าคุณต้องการทำอะไรต่อไป: พัฒนาสำหรับเว็บ องค์กร เดสก์ท็อป หรืออุปกรณ์ พกพา

เว็บหรือไม่เว็บ?

เว็บ

โปรแกรมเมอร์เว็บสามารถแบ่งออกเป็นนักพัฒนาส่วนหน้าและส่วนหลัง คุณควรเข้าใจว่าคำเหล่านี้หมายถึงอะไร นักพัฒนาส่วนหน้ามีส่วนร่วมในฝั่งไคลเอ็นต์ กล่าวคือ สิ่งที่ผู้ใช้เห็น "แบ็กเอนด์" นั้นเกี่ยวกับการจัดการและจัดเก็บข้อมูล ซึ่งเป็นส่วนหนึ่งของบริการที่ทำงานบนเซิร์ฟเวอร์ สำหรับ นักพัฒนา ส่วนหน้าที่ต้องตัดสินใจว่าจะเรียนรู้ภาษาโปรแกรมใดJavaScriptและเฟรมเวิร์ก JavaScript (Angular JS, React และอื่นๆ) เป็นสิ่งจำเป็น ภาษา JS เช่น CoffeeScript และ TypeScript ไม่เป็นที่นิยมเท่าภาษาแม่ แต่ก็มีประโยชน์เช่นกัน นอกจากนี้ยังมี Flash AS และเคยเป็น JScript และ VBScript แต่ไดโนเสาร์เท่านั้นที่จำได้ =) นอกจากนี้ คุณต้องเข้าใจHTMLและCSS _ การเลือกภาษาโปรแกรม - 2ผู้เริ่มต้นหลายคนคิดว่า JavaScript และ Java เกือบจะเหมือนกัน อย่าสับสนกับภาษาเหล่านี้ JS เดิมเรียกว่า "LiveScript" และมีชื่อปัจจุบันเพียงเพราะความนิยมของคำว่า "Java" สำหรับ นักพัฒนา เว็บแบ็กเอนด์ PHP, Python, Ruby, Perl และ Java นั้นเหมาะสม ที่นี่ฉันต้องการเน้นที่ PHP (เราจะพูดถึงภาษาอื่นในภายหลัง) PHPเป็นหนึ่งในภาษาที่ง่ายที่สุดในการเรียนรู้ มีเกณฑ์การเข้าต่ำ จากการสำรวจของนักพัฒนาเว็บที่มีชื่อเสียงพบว่า Ruby ได้รับความนิยมอย่างช้าๆ แต่ได้รับความนิยมอย่างแน่นอน — เป็นที่ชื่นชอบในความกระชับและสวยงาม

ไม่ใช่เว็บ (องค์กร เดสก์ท็อป มือถือ)

ฉันตั้งใจรวมภาษาการเขียนโปรแกรมต่อไปนี้เข้ากับหมวดหมู่นี้ด้วยชื่อที่แปลก คุณสามารถใช้ส่วนใหญ่เพื่อเขียนแอปพลิเคชันสำหรับองค์กร เดสก์ท็อป และแม้แต่มือถือ Pythonเป็นภาษาโปรแกรมเชิงวัตถุที่เข้าใจง่าย และได้รับความนิยมอย่างเหลือเชื่อเมื่อเร็วๆ นี้เนื่องจากการเรียนรู้ของเครื่อง (ML) ที่เติบโต: นักพัฒนา ML ใช้ประโยชน์จาก Python อย่างกว้างขวาง ม.ลเป็นพื้นที่ค่อนข้างใหม่ในด้านไอที และแม้ว่าเราจะเห็นแล้วว่าจะเกิดผล แต่ฉันจะไม่รีบร้อนเข้าสู่อุตสาหกรรมนี้เมื่อเลือกภาษาโปรแกรม ขั้นแรก คุณต้องมีความเข้าใจคณิตศาสตร์อย่างดีเยี่ยม ประการที่สอง คลื่นแห่งความนิยมอาจส่งผ่านในลักษณะเดียวกับที่เกิดกับ "บล็อกเชน" หรือ "นาโนเทคโนโลยี" คุณอาจจำได้ว่า Python นั้นใช้ในการพัฒนาเว็บ ภาษาซี++: ภาษาคลาสสิกที่ทุกอย่างสร้างขึ้นจากตัวดำเนินการ "บวก-บวก" ภาษานี้เป็นบรรพบุรุษของภาษาการเขียนโปรแกรมเชิงวัตถุยอดนิยมทั้งหมด และผู้เริ่มต้นควรให้ความสนใจกับมันอย่างแน่นอน แอพพลิเคชั่นยอดนิยมมากมายถูกเขียนขึ้นโดยใช้มัน แต่โอกาสที่ยอดเยี่ยมในการ "ยิงตัวเองด้วยเท้า" และไวยากรณ์ที่เข้าใจยากทำให้ความน่าจะเป็นที่ผู้เริ่มต้นจะเชี่ยวชาญในการเขียนโปรแกรมนี้กลายเป็นศูนย์ คอตลินซึ่งเหมือนกับ Java สำหรับฮิปสเตอร์ เป็นส่วนผสมที่ลงตัวระหว่าง OOP และการเขียนโปรแกรมเชิงฟังก์ชัน เป็นที่นิยมเมื่อเร็ว ๆ นี้เนื่องจากนักพัฒนาที่มีประสบการณ์เปลี่ยนจาก Java เป็น Kotlin สามารถปรับปรุงประสิทธิภาพการทำงานของเขาหรือเธอได้อย่างจริงจัง นักพัฒนาที่มีประสบการณ์จะคุ้นเคยกับภาษาโปรแกรมนี้ได้อย่างรวดเร็ว อย่างไรก็ตาม สิ่งเดียวกันนี้ใช้กับ Scala แต่ Kotlin เป็นที่นิยมในโลก Android Javaเป็นเรื่องง่ายสำหรับผู้เริ่มต้นในการเรียนรู้ โดยเฉพาะอย่างยิ่งด้วยความช่วยเหลือของCodeGym =) ไวยากรณ์ Java นั้นเข้าใจได้และแม้ว่าจะมีความเสี่ยงที่จะ "ยิงตัวเองเข้าที่เท้า" แต่ก็ไม่สำคัญ

OOP หรือ POP?

แนวทางขั้นตอน

วิธีการที่มุ่งเน้นขั้นตอนเกี่ยวข้องกับการเขียนโปรแกรมที่ประกอบด้วยคำสั่งตามลำดับที่สามารถรวมเข้าด้วยกันเป็นหนึ่งเดียวทั้งหมดเพื่อแก้ปัญหาชุดเฉพาะอย่างมีประสิทธิภาพ ภาษาดังกล่าวรวมถึง C , PureBasicและPascal กล่าวอีกนัยหนึ่งคือภาษาที่นำความสิ้นหวังมาสู่นักเรียนมัธยมปลายและนักศึกษาปริญญาตรี นอกจากนี้ยังมีGO ที่ค่อนข้างใหม่ภาษา. ที่กล่าวว่า การทำความคุ้นเคยกับภาษาเชิงขั้นตอนนั้นมีประโยชน์มากสำหรับนักพัฒนาที่มีศักยภาพ การเรียนรู้ภาษาขั้นตอนของฉันมาพร้อมกับระบบ Wolfram Mathematica และการวิจัยในมหาวิทยาลัย อัลกอริธึมที่เหมาะสมและขั้นตอนง่าย ๆ ซึ่งเคลื่อนที่เป็นเส้นตรงจากจุดเริ่มต้นของโปรแกรมไปยังจุดสิ้นสุด ทำให้ฉันสามารถคำนวณค่าที่เกี่ยวข้องกับฟิสิกส์เชิงทฤษฎีสมัยใหม่ได้ ภาษาการเขียนโปรแกรมแบบ "ต่อเนื่อง" นี้เป็นเพียงสิ่งที่จะช่วยให้คุณเข้าใจว่าบางครั้งการเขียนโค้ดที่ทำการคำนวณด้วยตนเองอาจง่ายกว่า การเรียนรู้การเขียนโปรแกรมเชิงขั้นตอน (POP) ให้การฝึกอบรมอัลกอริทึมที่ดี ซึ่งนายจ้างมักต้องการเห็นในผู้สมัครงาน ทุกสิ่งใน IT สร้างขึ้นจากพื้นฐานของภาษาเชิงขั้นตอน ดังนั้นอย่าประมาท อนึ่ง, ผู้เริ่มต้นตัดสินใจว่าจะเรียนรู้ภาษาโปรแกรมใดมักจะคิดว่าเฉพาะภาษา OOP เท่านั้นที่รองรับมัลติเธรด นี่ไม่เป็นความจริง. ภาษาการเขียนโปรแกรมเชิงขั้นตอนยังอนุญาตให้มีการคำนวณแบบขนาน การเลือกภาษาโปรแกรม - 3

วิธีการเชิงวัตถุ

ผู้ที่เริ่มด้วยภาษาขั้นตอนมักจะเชี่ยวชาญในวิชาคณิตศาสตร์ อัลกอริทึม และโครงสร้างข้อมูลเป็นอย่างดี (เนื่องจากมหาวิทยาลัยเทคนิคให้ความสำคัญกับพื้นที่เหล่านี้) ถึงกระนั้น ความจริงในปัจจุบันก็คือโปรแกรมเมอร์ที่ประสบความสำเร็จมักเป็นผู้ที่เชี่ยวชาญในแนวทางที่แตกต่างในการเขียนโปรแกรม นั่นคือ กระบวนทัศน์เชิงวัตถุ อุดมการณ์ OOP ช่วยให้คุณสร้างระบบสากลอย่างแท้จริง คุณลักษณะของแนวทางนี้คือความคล้ายคลึงกับโลกแห่งความเป็นจริง:
  • วัตถุต่าง ๆ โต้ตอบกันและดำรงอยู่อย่างเป็นอิสระจากกัน
  • วัตถุมีลำดับชั้นและสามารถรับหรือเปลี่ยนพฤติกรรมของบรรพบุรุษได้
  • คุณสามารถใช้แนวคิดที่เป็นนามธรรมได้ แต่วัตถุที่มีอยู่จริงเท่านั้นที่สามารถโต้ตอบได้

ตัวอย่าง

ภาษาที่เน้นขั้นตอนเป็นเครื่องมือในการแก้ปัญหาเฉพาะ หากงานของคุณเปลี่ยนไปแม้เพียงเล็กน้อย คุณอาจต้องใช้เวลาและความพยายามในการเขียนอัลกอริทึมใหม่ทั้งหมด

ลองนึกภาพโปรแกรมที่อธิบายตัวแทนจำหน่ายรถยนต์ที่ขายรถยนต์และรถบรรทุก ทั้งใหม่และใช้แล้ว ในภาษาขั้นตอน คุณต้องกำหนดฟังก์ชันที่ประมวลผลอินพุตหรือเอาต์พุตของข้อมูลสำหรับแต่ละเอนทิตี: รถใหม่ รถบรรทุกใหม่ รถใช้แล้ว และรถบรรทุกใช้แล้ว OOP เสนออะไร? ด้วยวิธีการเชิงวัตถุ เราเพียงแค่ต้องกำหนดคลาสฐานของยานพาหนะที่เก็บคุณลักษณะที่ใช้ร่วมกันโดยยานพาหนะทุกประเภท:

  • ทำ
  • การกระจัดของเครื่องยนต์
  • แรงม้า
  • ปี
  • ใหม่หรือใช้แล้ว
  • ราคา

และวิธีการรับส่งข้อมูล จากนั้นเราจะสร้างวัตถุที่สืบทอดคุณลักษณะของคลาสยานพาหนะ: รถยนต์และรถบรรทุก ซึ่งประกอบด้วยข้อมูลที่เกี่ยวข้องกับยานพาหนะประเภทนี้โดยเฉพาะ ตลอดจนวิธีการป้อนข้อมูล/ผลลัพธ์

ทันใดนั้น ผู้บริหารของตัวแทนจำหน่ายตัดสินใจขยายกลุ่มผลิตภัณฑ์โดยนำเสนอรถจักรยานยนต์ด้วย ภายใต้แนวทางขั้นตอน เราจะต้องสร้างตรรกะทั้งหมดสำหรับมอเตอร์ไซค์ใหม่และมอเตอร์ไซค์มือสอง ในขณะที่ภาษา OOP ช่วยให้เราสร้างคลาสมอเตอร์ไซค์ใหม่ที่สืบทอดคุณลักษณะทั้งหมดของซูเปอร์คลาสยานยนต์และมีการปรับแต่งเฉพาะมอเตอร์ไซค์

และจะเกิดอะไรขึ้นถ้าเราเพิ่มยานพาหนะต่างๆ เข้าไป? การดำเนินการตามขั้นตอนจะต้องทำงานมากกว่า OOP ยิ่งไปกว่านั้น ยิ่งรายการมีขนาดใหญ่เท่าใด การดำเนินการเกี่ยวกับออบเจกต์ก็จะยิ่งน้อยลงเท่านั้น

ดังนั้น OOP จึงเป็นรูปแบบการเขียนโปรแกรมที่ให้คุณรวมข้อมูลและเมธอดเป็นเอนทิตีเดียวและทำงานร่วมกับพวกมันเป็นวัตถุรวม สามารถจัดเรียงเอนทิตีในลำดับชั้นและโต้ตอบกันโดยไม่ต้องเจาะลึกรายละเอียดการใช้งานภายในของกันและกัน ฉันจะชี้ให้เห็นเหตุผลสามประการว่าทำไม OOP เป็นแนวทางที่ก้าวหน้ากว่าสำหรับฉัน:
  1. OOP เกี่ยวข้องกับการพัฒนาแต่ละโมดูลโดยอิสระ ทำให้โปรแกรมเมอร์หรือทีมสามารถเลือกวิธีการและขอบเขตของการติดต่อและการแลกเปลี่ยนข้อมูลได้
  2. รหัสที่แบ่งพาร์ติชันเป็นโมดูลขนาดเล็กนั้นอ่านได้ง่ายกว่าขั้นตอนแบบเสาหินมาก ส่งผลให้บุคคลภายนอกสามารถเข้าใจรหัสของคุณได้อย่างรวดเร็ว และเช่นเดียวกัน คุณสามารถเข้าร่วมโครงการใหม่ได้หากจำเป็น
  3. คลาสหนึ่งสามารถเปลี่ยนแปลงได้โดยไม่ส่งผลกระทบต่อการโต้ตอบของอีกคลาสหนึ่ง แต่การเปลี่ยนแปลงดังกล่าวอาจส่งผลต่อลำดับชั้นของวัตถุย่อย เมื่อคุณเข้าใจแนวทางนี้แล้ว การขยายและแก้ไขโปรแกรมจะกลายเป็นเรื่องเล็กน้อย
โปรดจำไว้ว่าแนวทางหนึ่งไม่ขัดแย้งกับอีกแนวทางหนึ่ง แต่ OOP ยังคงสูงกว่าในลำดับชั้น เหตุใดฉันจึงแนะนำ Java ฉันจะเน้นเหตุผลต่อไปนี้:
  1. ข้ามแพลตฟอร์ม

    Java ทำงานได้ทุกที่ด้วย Java virtual machine (JVM) ข้อได้เปรียบหลักอย่างหนึ่งของภาษานี้คือลักษณะการทำงานข้ามแพลตฟอร์ม: ไม่จำเป็นต้องคิดว่าจะเพิ่มไลบรารีใดหรือสถาปัตยกรรมของโปรเซสเซอร์ใด "เขียนครั้งเดียววิ่งไปทุกที่"

  2. เอกสาร

    มีฐานเอกสารขนาดใหญ่: เอกสารอย่างเป็นทางการของ Oracle, พอร์ทัลการฝึกอบรม และชุมชนที่มีการพัฒนาอย่างต่อเนื่อง คำตอบสำหรับคำถามส่วนใหญ่ที่เกิดขึ้นระหว่างการพัฒนาสามารถพบได้ในไม่กี่นาที สิ่งสำคัญคือต้องเข้าใจว่าจะป้อนอะไรในเครื่องมือค้นหา =)

  3. ความนิยม

    Java เป็นภาษาโปรแกรมที่ได้รับความนิยมมากที่สุดในโลก นอกเหนือจาก Android และนักพัฒนาเว็บที่กล่าวมาแล้ว นักพัฒนาองค์กรเกือบทุกคนเขียนด้วย Java องค์กรหมายถึงการพัฒนาองค์กรภายในที่จำเป็นสำหรับความต้องการขององค์กรขนาดใหญ่

    ทุกๆ ปี เหล่าผู้เกลียดชังทำนายว่า "ความตายของเกาะชวา" พวกเขาพูดว่า " Oracle จะเลิกสนับสนุนแล้ว คุณกำลังเสียเวลาเปล่าๆ " ซึ่งไม่เป็นความจริง! พวกเขาสัญญาว่าจะปล่อย Java เวอร์ชันใหม่ทุก ๆ หกเดือน

    สำหรับฉัน การแสดงออกของแลมบ์ดาใน Java 8 เป็นการปฏิวัติและการเปิดเผย ไม่ต้องพูดถึงเวอร์ชันใหม่เลย! ขณะนี้ฉันกำลังทำงานในโครงการ "ดั้งเดิม" ดังนั้นฉันจึงไม่ได้เจาะลึกถึงนวัตกรรมล่าสุด แต่เป็นความจริงที่ว่า Java ยังมีชีวิตอยู่

    การเลือกภาษาโปรแกรม - 4
  4. แอนดรอยด์.

    ใน ช่วง4 ปีที่ผ่านมา Android ครองตลาดโทรศัพท์มือถือมากกว่า 80% อย่างต่อเนื่อง ทีวี เครื่องเล่นมีเดีย และแม้แต่ระบบสาระบันเทิงในรถยนต์ก็ทำงานบนระบบปฏิบัติการนี้ และการพัฒนาแอพสำหรับระบบปฏิบัติการนี้ส่วนใหญ่เกิดขึ้นใน Java แค่จินตนาการถึงโอกาสที่กำลังเปิดขึ้น เมื่อฉันได้งานเป็นนักพัฒนา Android ฉันสงสัยว่าผลิตภัณฑ์ที่ฉันกำลังพัฒนามีมูลค่าเท่าไหร่? เมื่อปรากฎว่าราคาประมาณ 5 ดอลลาร์ต่อปี นั่นทำให้เกิดคำถามว่า "แล้วเงินสำหรับสำนักงานนี้ เงินเดือน ค่าขนม โต๊ะปิงปอง หุ่นยนต์ และสิทธิพิเศษอื่นๆ มาจากไหน คำตอบอยู่ที่ปริมาณ: แอปของเรามีผู้ใช้ 20 ล้านคน

  5. เงินเดือน

    และตอนนี้สิ่งที่สำคัญที่สุดคือ: เงินเดือนของนักพัฒนา Java เป็นหนึ่งในกลุ่มที่สูงที่สุดในอุตสาหกรรม ท้ายที่สุด คุณกำลังวางแผนที่จะศึกษาการเขียนโปรแกรมเพื่อวัตถุประสงค์เฉพาะ: เพื่อให้ได้งานที่ดี

ความนิยมของภาษาโปรแกรม

มีแหล่งข้อมูลที่เป็นทางการดังนั้นเรามาดูกันดีกว่า จากข้อมูลของTIOBE Java อยู่ในอันดับที่หนึ่ง ณ เดือนตุลาคม 2019 ในการ จัดอันดับ PYPL Java อยู่ในอันดับที่สอง นำหน้า JS ไปไกลและเป็นคู่แข่งกับ Python ยอดนิยม

บทสรุป

ในฐานะผู้เริ่มต้นที่พิจารณาเลือกภาษาการเขียนโปรแกรม นี่คือสิ่งที่เขาหรือเธอควรให้ความสนใจ:
  • ความนิยม (Java ครองตำแหน่งผู้นำอย่างต่อเนื่อง)
  • เกณฑ์การรับสมัคร (สำหรับ Java เป็นระดับกลาง: นายจ้างต้องการทักษะที่หลากหลาย)
  • วัสดุที่มีอยู่ (ยินดีต้อนรับสู่ CodeGym =))
  • ขอบเขตการใช้งาน: ยิ่งมีการใช้ภาษาโปรแกรมมากเท่าใด ตลาดก็ยิ่งต้องการผู้เชี่ยวชาญมากเท่านั้น ฉันได้กล่าวถึงวิธีที่ Java รองรับการพัฒนาข้ามแพลตฟอร์ม แต่ฉันไม่เคยเบื่อที่จะทำซ้ำ
แน่นอนว่ามีข้อผิดพลาดอยู่ทุกที่ แต่ผู้ที่ก้าวไปข้างหน้า: มีเพียงคุณเท่านั้นที่สามารถตัดสินใจได้ว่าจะเลือกภาษาโปรแกรมใด ขอให้โชคดีในการเรียนรู้!
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION